0

这篇令人困惑的 MSDN 文章讨论了从 ASP.Net 应用程序调用 Web 服务如何导致死锁。我了解每个 Web 服务调用需要第二个线程来完成 IO 的部分。我了解可能并不总是有这样的线程可用,这意味着进行 Web 服务调用的线程将阻塞并且在这样的线程可用之前不会取得进展。但在我看来,确实获得 IO 线程的 Web 服务调用会提前,最终两个线程都将被释放回线程池以供先前阻塞的调用使用。那么僵局从何而来?在 IIS 终止进程时,您能描述一下死锁线程在等待什么吗?

4

1 回答 1

0

本文适用于 .NET 1.0 / IIS 6,并不真正适用于较新版本的 .NET/IIS。在框架的更新版本中,线程池和 IOCP 线程的数量限制要高得多,您遇到它们的可能性非常非常小。

曾经发生的基本问题是 ASP.NET 会限制它允许使用任何东西的线程数,并且 Web 请求在 I/O 线程上处理,因此传入的 Web 请求将消耗所有可用线程和 IO 完成未完成的(异步)调用将在等待它们的 Web 请求后面排队。

另请参阅http://blogs.msdn.com/b/nicd/archive/2007/04/16/dissection-of-an-asp-net-2-0-request-processing-flow.aspx

于 2012-06-14T20:55:30.303 回答