This令人困惑的MSDN文章讨论了如何从ASP.Net应用程序调用Web服务可能导致死锁。我理解每个Web服务调用的部分需要第二个线程来完成IO。我知道可能并不总是有这样的线程可用,这意味着进行Web服务调用的线程将阻塞并且在这样的线程可用之前不会进行。但在我看来,确实获得IO线程的Web服务调用将会推进,并且最终两个线程将被释放回线程池以供以前阻塞的调用使用。那么僵局来自哪里?在IIS杀死进程的时候,你能描述一下死锁的线程在等什么吗?
答案 0 :(得分:0)
本文适用于.NET 1.0 / IIS 6,并不适用于较新版本的.NET / IIS。在最新版本的框架中,线程池和IOCP线程数量的限制要大得多,而且遇到它们的可能性非常非常小。
过去常见的基本问题是ASP.NET会限制允许任何东西使用的线程数,并且I / O线程上会处理Web请求,因此传入的Web请求将消耗所有可用的线程和未完成(异步)调用的IO完成将排在等待它们的Web请求之后。