Вопрос

У нас есть удаленный одноэлементный сервер, работающий в отдельной службе Windows (назовем ее RemotingService).Клиентами RemotingService являются экземпляры ASP.NET (многие).

В настоящее время клиенты, осуществляющие удаленное взаимодействие, вызывают RemotingService и блокируются, пока обслуживается вызов RemotingService.Однако служба удаленного взаимодействия становится настолько сложной (с большим количеством вызовов RPC и сложными алгоритмами), что рабочие потоки asp.net блокируются на значительное время (4-5 секунд).

В соответствии с эта статья MSDN, это не будет хорошо масштабироваться, поскольку рабочий поток asp.net блокируется для каждого удаленного RPC.Он советует переключиться на асинхронные обработчики, чтобы освободить рабочие потоки asp.net.

Цель асинхронного обработчика состоит в том, чтобы освободить поток пула потоков ASP.NET для обслуживания дополнительных запросов, в то время как обработчик обрабатывает исходный запрос.

Кажется, это нормально, за исключением того, что вызов удаленного взаимодействия по-прежнему занимает поток из пула потоков.Это тот же пул потоков, что и рабочие потоки asp.net?

Как мне превратить мой удаленный одноэлементный сервер в асинхронную систему, чтобы освободить рабочие потоки asp.net?

Вероятно, я пропустил какую-то важную информацию. Если вам нужно знать что-то еще, пожалуйста, дайте мне знать, чтобы ответить на вопрос.

Это было полезно?

Решение

Идея использования ThreadPool заключается в том, что с его помощью вы можете контролировать количество синхронных потоков, и если их становится слишком много, пул потоков автоматически управляет ожиданием новых потоков.

Рабочий поток Asp.Net (AFAIK) не поступает из пула потоков, и на него не должен влиять ваш вызов службы удаленного взаимодействия (если только это не очень медленный процессор, а ваша функция удаленного взаимодействия очень интенсивно использует процессор - в этом случае В этом случае это повлияет на все на вашем компьютере).

Вы всегда можете разместить службу удаленного взаимодействия на другом физическом сервере.В этом случае ваш рабочий поток asp.net будет полностью независим от вашего вызова удаленного взаимодействия (если вызов удаленного взаимодействия вызывается в отдельном потоке).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top