web-dev-qa-db-ja.com

ワーカースレッドとは何ですか。また、reactorパターンでのそれらの役割は何ですか。

私はリアクターパターン(同時)を理解しようとしていますが、多くの例では、それらは「ワーカースレッド」について話しています。ワーカースレッドとは何ですか?それらは「通常の」スレッドとどのように異なりますか?そして、原子炉パターンにおけるそれらの役割は何ですか?

24
Jon

Reactorパターン は、アプリケーションの一般的なシナリオを克服するためにワーカースレッドで使用されます。最終的に多くの作業を行う必要がありますが、作業と、いつ、どのスレッドを作成するかは、コストのかかる操作です。

アイデアは、最初は何もしない多数のスレッドを作成することです。代わりに、彼らは「仕事を待つ」。作業が(コードの形式で)到着すると、ある種のエグゼキューターサービス(reactor)がプールからアイドルスレッドを識別し、それらに実行する作業を割り当てます。

そうすれば、すべてのスレッドを一度に作成するための代償を払うことができます(一部の作業を行う必要があるたびにではありません)。同時に、スレッドは汎用的です。彼らは、特定のことをするために専門化されるのではなく、割り当てられた仕事を何でもします。

実装については、 スレッドプール を参照してください。

34
Aaron Digulla

私はあなたが何かについて話していると思います このスレッドプールに関するドキュメントのように

Java.util.concurrentのほとんどのexecutor実装は、ワーカースレッドで構成されるスレッドプールを使用します。この種のスレッドは、実行するRunnableタスクとCallableタスクとは別に存在し、複数のタスクを実行するためによく使用されます。

ワーカースレッドは通常のスレッドですが、作業するRunnableまたはCallableクラスとは別に存在します。 Threadを拡張するか、Thread引数を使用してRunnableを作成すると、タスクはThreadオブジェクトに直接関連付けられます。

Executors.newFixedThreadPool(10);(または他の同様のメソッド)を使用してスレッドプールを作成する場合、さまざまなRunnableまたはCallableクラスを実行できる10スレッドのプールを作成しますプールに送信されます。カバーの下では、ラップされているため、Threadはより柔軟です。

reactorパターン に関しては、類似したハンドラースレッドによって異なるタイプのイベントが実行されます。スレッドは単一のイベントクラスに関連付けられていませんが、発生するたびにさまざまなイベントを実行します。