ServiceStack не имеет настраиваемой модели параллелизма для AppHost, это зависит от AppHost, который вы решили разместить у своих сервисов ServiceStack:
Хост ASP.NET (AppHostBase)
Для веб-узлов ASP.NET ServiceStack не создает никаких новых потоков , запросы просто обрабатываются на том же IIS/Nginx/etc ASP.NET HTTP WebWorker, который обрабатывает запрос.
HttpListener Self-Host (AppHostHttpListenerBase)
ServiceStack создает новый поток Startup при вызове new AppHost (). Start (url)
. Во время выполнения нет новых потоков, т. Е. Запрос обрабатывается в потоке обратного вызова асинхронного HttpListener.
HttpListener Long Running Self-Host (AppHostHttpListenerLongRunningBase)
Это еще один параметр HttpListener для самостоятельного хоста для ServiceStack, который использует собственный управляемый ThreadPool для выполнения запроса (освобождение потока обратного вызова асинхронного HttpListener async). Пул по умолчанию для ThreadPool по умолчанию - 500 , хотя это настраивается в конструкторе AppHostHttpListenerLongRunningBase (poolSize)
.
RedisMQ Host (RedisMqServer)
Хорошим вариантом для управления долговременными задачами является делегирование запросов на Redis MQ Host , который легкий MQ-сервер, позволяющий отложить и обработать запросы в управляемых потоках фона. По умолчанию RedisMqServer генерирует единственный фоновый поток для каждого типа сообщения (т. Е. Запрос), хотя это настраивается при запуске, например: в приведенном ниже примере 2 фоновых потока используются для обработки PostTwitter
, тогда как только один фоновый поток используется для обработки запросов CallFacebook
и EmailMessage
:
mq.RegisterHandler(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler(ServiceController.ExecuteMessage);
mq.RegisterHandler(ServiceController.ExecuteMessage);