私はReactorパターン(同時)を理解しようとしていますが、多くの例で彼らは「ワーカースレッド」について話しています。ワーカースレッドとは何ですか?それらは「通常の」スレッドとどのように異なりますか?そして、リアクターパターンにおけるそれらの役割は何ですか?
2 に答える
Reactorパターンは、アプリケーションの一般的なシナリオを克服するためにワーカースレッドで使用されます。最終的には多くの作業を行う必要がありますが、どの作業をいつ実行するかがわからず、スレッドの作成はコストのかかる操作です。
最初は何もしないスレッドをたくさん作成するという考え方です。代わりに、彼らは「仕事を待つ」。作業が(コードの形式で)到着すると、ある種のエグゼキュータサービス(reactor)がプールからアイドル状態のスレッドを識別し、それらに実行する作業を割り当てます。
そうすれば、すべてのスレッドを一度作成するための代償を払うことができます(そして、いくつかの作業を行う必要があるたびにではありません)。同時に、スレッドは汎用です。彼らは、特定のことをすることに特化するのではなく、割り当てられた仕事を何でもします。
実装については、スレッドプールを見てください。
ワーカースレッドとは何ですか?また、reactorパターンでのそれらの役割は何ですか?
私はあなたがスレッドプールに関するこのドキュメントのようなものについて話していると思います:
java.util.concurrentのエグゼキュータ実装のほとんどは、ワーカースレッドで構成されるスレッドプールを使用します。この種のスレッドは、実行するRunnableおよびCallableタスクとは別に存在し、複数のタスクを実行するためによく使用されます。
Runnable
ワーカースレッドは通常のスレッドですが、作業するまたはCallable
クラスとは別に存在します。拡張するThread
かThread
、引数を使用してを作成するとRunnable
、タスクはThread
オブジェクトに直接関連付けられます。
Executors.newFixedThreadPool(10);
(または他の同様の方法)を使用してスレッドプールを作成する場合、プールに送信される任意の数の異なるクラスRunnable
またはクラスを実行できる10個のスレッドのプールを作成します。Callable
カバーの下では、それらが包まれている方法のために、それらはまだThread
ちょうどより柔軟です。
リアクターパターンに関しては、同様のハンドラースレッドによってさまざまなタイプのイベントが実行されます。スレッドは単一のイベントクラスに関連付けられていませんが、発生時に任意の数の異なるイベントを実行します。