Как ServiceStack обрабатывает одновременные вызовы?

Как ServiceStack обрабатывает одновременные вызовы? Я ищу эквивалент ConcurrencyMode.Multiple в WCF.

У моих служб WCF этот набор атрибутов:

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]

Нужно ли мне включить что-либо в ServiceStack, чтобы заставить его использовать несколько потоков для каждого вызова?

16
добавлено
Просмотры: 2
nl ja de

1 ответы

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);
16
добавлено
Этот ответ просто скопируйте «отклик» из здесь без указания источника или это было наоборот?
добавлено автор mono68, источник
IIS обрабатывает многопоточность потоков HTTP Worker так же, как и с любым другим веб-приложением ASP.NET (это все, что ServiceStack при размещении в ASP.NET). IIS - многопоточный веб-сервер, который обрабатывает запросы одновременно.
добавлено автор mythz, источник
@ mono68 Я автор обоих, сначала ответил здесь, прежде чем добавлять его в документы.
добавлено автор mythz, источник
Итак, с AppHostBase, размещенной в IIS, если одновременно обслуживают 4 клиента одновременно одну услугу, или они обрабатываются один за другим? Первоначально я думал, что WCF будет обрабатывать каждый запрос одновременно, но по умолчанию он последовательно обрабатывает один запрос за раз. Очень интересная статья, объясняющая модель параллелизма WCF, приведена здесь:
добавлено автор Dylan, источник