問題タブ [forkjoinpool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
708 参照

java - 指定されたよりも多くの CPU を使用している ForkJoinPool

次のように、CPU の半分を使用するように ForkJoinPool を設定しました。

ただし、そこで説明されているマージ ソートなどのジョブを送信すると、プールはマシンの CPU の最大 80% 以上を使用しています。

これは何か期待されていますか?もしそうなら、作業スレッドの数を効果的に制限する方法はありますか?

0 投票する
0 に答える
62 参照

java - 同時実行フォークJoinPool フィボナッチ

特定の拡張子を持つファイルのディレクトリとそのサブディレクトリの検索に関連する ForkJoinPool の非常に良い例を実行した後、難問が頭に浮かびました。このプログラムは、ディレクトリを含むサブディレクトリが見つかるたびに複数のタスクに分岐していました。つまり、すべてのサブディレクトリ検索が別のタスクになり、デュアル コア プロセッサ環境内での並列処理により、処理が通常より高速になりました。例は http://howtodoinjava.com/2014/05/27/forkjoin-framework-tutorial-forkjoinpool-example/にあります。

私の質問は、フィボナッチ数列のような順次処理タスクに対してこの種の処理を実行できるかということです。シリーズの は、前の 2 つの計算の結果です。この種の計算を複数のタスクにフォークして、結果をより速く計算することはできますか?

0 投票する
1 に答える
561 参照

java - ForkJoinPool、Phaser、マネージド ブロッキング: デッドロックに対してどの程度機能しますか?

次の小さなコード スニペットは、jdk8u45 では終了せず、jdk8u20 では正常に終了していました。

フェイザーのドキュメントには、次のように記載されています

Phaser は、ForkJoinPool で実行されているタスクでも使用できます。これにより、フェーズが進むのを待っている他のタスクがブロックされている場合に、タスクを実行するのに十分な並列性が保証されます。

ただし、ForkjoinPool#mangedBlock の javadoc には次のように記載されています。

ForkJoinPool で実行している場合は、最初にプールを拡張して、十分な並列性を確保することができます

そこにあるのは5月だけです。したがって、これがバグなのか、それとも Phaser/ForkJoinPool のコントラクトに依存していない単に悪いコードなのかはわかりません。Phaser/ForkJoinPool の組み合わせのコントラクトは、デッドロックを防ぐためにどの程度機能しますか?


私の設定:

  1. Linux adc 3.14.27-100.fc19.x86_64 #1 SMP Wed Dec 17 19:36:34 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  2. 8 コア i7
0 投票する
1 に答える
4984 参照

java - Java Fork/Join プール、ExecutorService および CountDownLatch

Java には、Fork/Join プール、Executor Service、CountDownLatchという 3 つの異なるマルチスレッド技術があります。

Fork/Join プール( http://www.javacodegeeks.com/2011/02/java-forkjoin-parallel-programming.html )

Fork/Join フレームワークは、分割統治アルゴリズムを簡単に並列化できるように設計されています。このタイプのアルゴリズムは、同じタイプの 2 つ以上のサブ問題に分割できる問題に最適です。再帰を使用して、問題を単純なタスクに分解し、それらが直接解決できるほど単純になるまで続けます。次に、サブ問題の解決策を組み合わせて、元の問題の解決策を提供します。

ExecutorServiceは、Executor クラスを拡張し、非同期実行を表すインターフェースです。非同期タスクの終了を管理し、進行状況を検出するメカニズムを提供します。

invokeAll() : 指定されたタスクを実行し、すべてが完了するとステータスと結果を保持する Future のリストを返します。Future.isDone() は、返されたリストの各要素に対して true です。

CountDownLatch :( http://examples.javacodegeeks.com/core-java/util/concurrent/countdownlatch-concurrent/java-util-concurrent-countdownlatch-example/ )

CountDownLatch は同期で使用され、他のスレッドで実行されている一連の操作が完了するまで、1 つ以上のスレッドを待機させることができます。

私の仮定:

これらのどちらの方法でも、最終結果はすべてのタスク/スレッドの完了後にのみわかります。

これらの 3 つの代替案は、相互に補完的または補足的ですか?