异步远程调用
时间:2020-03-05 18:39:33 来源:igfitidea点击:
我们有一个远程单例服务器运行在单独的Windows服务中(我们称其为RemotingService)。 RemotingService的客户端是ASP.NET实例(很多)。
当前,客户端远程处理调用RemotingService并在服务RemotingService调用时阻止。但是,远程服务变得非常复杂(具有更多的RPC调用和复杂的算法),以致asp.net工作线程被阻塞了相当长的时间(4-5秒)。
根据这篇msdn文章,这样做不能很好地扩展,因为每个远程RPC都阻止了asp.net工作线程。它建议切换到异步处理程序以释放asp.net辅助线程。
The purpose of an asynchronous handler is to free up an ASP.NET thread pool thread to service additional requests while the handler is processing the original request.
这看起来很好,除了远程调用仍然从线程池中占用线程。
这是与asp.net工作线程相同的线程池吗?
我应该如何将我的远程单例服务器转换为异步系统,以便释放asp.net辅助线程?
我可能已经错过了一些重要信息,如果需要其他信息来回答这个问题,请告诉我。
解决方案
回答
使用ThreadPool的想法是,通过它可以控制同步线程的数量,如果同步线程数量过多,则线程池将自动管理更新线程的等待。
Asp.Net工作线程(AFAIK)并非来自线程池,也不会受到对远程服务的调用的影响(除非这是一个非常慢的处理器,并且在这种情况下,远程功能会占用大量CPU ,我们计算机上的所有内容都会受到影响)。
我们始终可以将远程处理服务托管在其他物理服务器上。在这种情况下,asp.net工作线程将完全独立于远程处理调用(如果远程处理调用是在单独的线程上进行的)。
回答
看一下ASP.NET中的"异步页面"。