0

この紛らわしいMSDNの記事では、ASP.NetアプリケーションからWebサービスを呼び出すとデッドロックが発生する可能性について説明しています。IOを完了するために2番目のスレッドが必要な各Webサービス呼び出しに関する部分を理解しています。そのようなスレッドが常に利用可能であるとは限らないことを理解しています。つまり、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 に答える