Асинхронные удаленные вызовы - PullRequest
9 голосов
/ 14 августа 2008

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 14 августа 2008

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

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

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

...