4

fork join スレッド プールの使用について簡単な質問があります。ここに私が使用しているものの短い例があります:

  executor = "fork-join-executor"
  # Configuration for the fork join pool
  fork-join-executor {
    # Min number of threads to cap factor-based parallelism number to
    parallelism-min = 24
    # Parallelism (threads) ... ceil(available processors * factor)
    parallelism-factor = 4.0
    # Max number of threads to cap factor-based parallelism number to
    parallelism-max = 48
  }

この場合、いくつのスレッドが作成されるのか、よくわかりません。2 コアのマシンで実行しているので、コアあたり 24 スレッド、最大 48 スレッドですか?

並列係数を 4.0 に設定すると、並列に実行できるスレッドの数は 8 になります。私の場合は 24 と 48 ですが、最小値と最大値を設定する必要はありますか?

4

1 に答える 1

6

では、並列処理がどのように機能するかを説明することから始めましょうForkJoinPool。スレッド数は、単一の (コンストラクター) パラメーターparallelism(デフォルトではコア数) によって制御されます。最大でも実行中のスレッドForkJoinPoolを保持しようとします。ただし、一部のスレッドがブロックされている場合は、より多くのスレッドを生成することを決定できます。たとえば、結合を待っているフォークされたタスクが多すぎる場合、新しいスレッドを追加しない限り、計算はブロックされます。待機中のスレッドはアクティブですが、実行されていません(待機しているため)。詳細はこちらparallelism

質問のディスパッチャー構成は、parallelismパラメーターに設定される値を制御します。利用可能なプロセッサに設定されます*parallelism-factorただし、少なくともparallelism-min最大でparallelism-max. 詳細については、こちらこちらをご覧ください。

この場合、いくつのスレッドが作成されますか?

平行度は である必要があります2 cores * 4 -> 8 threads。したがって、実行中のスレッドの数は 8 である必要がありますが、作成されるスレッドの合計数はそれより多くなる可能性があります。

私の場合は24と48である最小値と最大値を設定する必要がありますか

コア数が異なるマシンにデプロイした場合のみだと思います。

于 2016-05-10T09:35:24.893 に答える