Dyl*_*lan 16 c# rest servicestack
ServiceStack如何处理并发调用?我在WCF中寻找相当于ConcurrencyMode.Multiple的东西.
我的WCF服务设置了此属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
Run Code Online (Sandbox Code Playgroud)
我是否需要在ServiceStack中启用任何内容以使其为每个调用使用多个线程?
myt*_*thz 16
ServiceStack每个AppHost没有可配置的并发模型,它依赖于您选择托管ServiceStack服务的AppHost:
对于ASP.NET Web主机,ServiceStack 本身不会创建任何新线程,只需在处理请求的同一IIS/Nginx/etc ASP.NET HTTP WebWorker上处理请求.
ServiceStack只在您调用时在Startup上创建一个新线程new AppHost().Start(url).在运行时没有创建新线程,即请求在HttpListener异步回调线程上处理.
这是ServiceStack的另一个Self-Host HttpListener选项,它使用自己的托管ThreadPool来执行请求(释放HttpListener异步回调线程).ThreadPool的默认poolSize是500个线程,但这可以在AppHostHttpListenerLongRunningBase(poolSize)构造函数中配置.
管理长时间运行任务的一个好方法是将请求委托给Redis MQ主机,这是一个轻量级MQ服务器,允许您在托管后台线程中推迟和处理请求.默认情况下,RedisMqServer为每个Message类型(即Request)生成一个后台线程,虽然这可以在启动时配置,例如:在下面的示例中,2个后台线程用于处理PostTwitter请求,而每个只使用1个后台线程处理CallFacebook和EmailMessage请求:
mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3764 次 |
| 最近记录: |