9

別の Windows サービスで実行されているリモーティング シングルトン サーバーがあります (彼女を RemotingService と呼びましょう)。RemotingService のクライアントは ASP.NET インスタンス (多数) です。

現在、リモート クライアントは RemotingService を呼び出し、RemotingService 呼び出しが処理されている間はブロックします。ただし、リモーティング サービスは非常に複雑になり (より多くの RPC 呼び出しと複雑なアルゴリズムを使用)、asp.net ワーカー スレッドが非常に長い時間 (4 ~ 5 秒) ブロックされます。

この msdn articleによると、リモート RPC ごとに asp.net ワーカー スレッドがブロックされるため、これを行うとうまくスケーリングされません。非同期ハンドラーに切り替えて、asp.net ワーカー スレッドを解放することをお勧めします。

非同期ハンドラーの目的は、ハンドラーが元の要求を処理している間に、ASP.NET スレッド プール スレッドを解放して追加の要求を処理できるようにすることです。

これは問題ないように見えますが、リモート処理の呼び出しが依然としてスレッド プールからスレッドを使用しています。これは、asp.net ワーカー スレッドと同じスレッド プールですか?

asp.net ワーカー スレッドを解放するために、リモート シングルトン サーバーを非同期システムに変えるにはどうすればよいですか?

いくつかの重要な情報を見逃している可能性があります。質問に答えるために他に知っておくべきことがあれば教えてください。

4

1 に答える 1

0

ThreadPool を使用する背後にある考え方は、それを使用して同期スレッドの量を制御できるということです。同期スレッドが多くなりすぎると、スレッド プールが新しいスレッドの待機を自動的に管理します。

Asp.Net で動作するスレッド (AFAIK) はスレッド プールからのものではなく、リモーティング サービスへの呼び出しによって影響を受けることはありません (これが非常に遅いプロセッサであり、リモーティング機能が非常に CPU を集中的に使用する場合を除きます)。その場合、コンピュータ上のすべてが影響を受けます)。

別の物理サーバーで常にリモート サービスをホストできます。その場合、asp.net ワーカー スレッドはリモート呼び出しから完全に独立します (リモート呼び出しが別のスレッドで呼び出された場合)。

于 2008-08-14T05:53:40.397 に答える