0

AsyncController がマルチスレッドの目標のために作成されたことを知っています。しかし、Controller クラスと AsyncController クラスの動作に違いは見られません。たとえば、HomeController:

public String First()
        {
            Thread.Sleep(5000);
            return "First";
        }

        public String Second()
        {
            return "Second";
        }

firefox の最初のタブで /Home/First/ リクエストを実行しようとしました。その後、/Home/Second/ を実行しようとすると、最初のアクションを待つことなく、2 番目のアクションが遅延なくすぐに実行されたことがわかります。これは、並列スレッドで実行されるリクエストと Controller クラスがマルチスレッドをサポートしていることを意味します。Controller を AsyncController に置き換えると、変更に気づきません。

だから私の質問は: AsyncController を使用する利点は何ですか? その場合、そのクラスを使用する必要がありますか?

4

1 に答える 1

3

別のサイトからコンテンツをダウンロードするなど、ユーザー要求が大量の IO 操作を待機している場合があります。このリクエストを処理するコントローラーが同期の場合、スレッドは IO 操作が完了するのを待機し、それによってサーバー リソースが浪費されます。サーバーにはサーバーへのスレッド数が制限されており、複数のユーザーが大きな IO オーバーヘッドで同じ操作を要求すると、サーバーがスレッドの制限に達し、アプリケーションがそれ以上の要求に応答しなくなる可能性があります。

非同期コントローラーが行うことは、IO操作が完了するまでスレッドを待機させないことです。IO操作をトリガーしてスレッドを解放し、操作が完了するとスレッドを引き戻します。操作の進行中、スレッドは解放され、他のユーザーのリクエストに対応できるため、スレッドが無駄になることはなく、アプリケーションがハングする可能性が低くなります。

非同期コントローラーは、コードの実行を高速化するために使用することを意図していないことに注意してください。

于 2012-09-19T13:41:07.387 に答える