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