問題タブ [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.
java - 管理されたブロッキングを使用した ForkJoinPool での飢餓
私のアプリケーションでは、2 種類のタスクを commonPool に異なるレートで送信しています。
タスク1:
タスク-2:
一部のシナリオでは、タイプタスク 1のタスクがプールにサブミットされる速度が高すぎて、blockingQueue がいっぱいになると、タイプタスク 1のタスクを実行しているすべてのスレッドが put でブロックされます (スレッド数52くらいです)。しかし、まだプールにサブミットされているタイプtask-1およびtask-2の新しいタスクは、プール内で新しいワーカーが生成されないため、後続のすべてのタスクがワーク キューにエンキューされ、飢餓とデッドロックにつながります。アプリがフリーズする原因。
ここで私が間違っていることを理解するのを手伝ってもらえますか?
掘り下げた後、これらを見つけました:
しかし、このバグはJava 7自体で修正されたようです。
環境:
- JDK: オラクル-j2sdk1.8 | 1.8.0+アップデート20
- アーチ: amd64
- OS: Debian Wheezy
共通プール構成:
- 利用可能なプロセッサ = 2
- つまり、並列度 = 1
- 他のすべての構成はデフォルトです
更新 1
いくつかの詳細情報:
内部呼び出しメソッドにsubmit
ランナブルを設定しています:ForkJoinPool
externalPush
リモートデバッグを行うと、実行が到達します
しかし、n は非常に大きく、1 以下ではないため、内部的signalWork
にメソッドを呼び出すメソッドは呼び出されていませんtryAddWorker
。
java - ForkJoinPool BufferedImage 処理スタイル
Java でForkJoinPoolを使用して画像を処理しようとしています。ストリームを使用して、画像に対していくつかのカスタム操作を行いました。メソッドにForkJoinPoolを使用しようとしていgetRGB
ますsetRGB
。getRGB
メソッドで並列処理を実現するにはどうすればよいですか?
のgetRealRGB
メソッドを単にプロキシしますBufferedImage
。これが非現実的かもしれないことは理解していますが、このコンテキストでForkJoinPoolを使用する方法を知りたいだけです。そして、ええ、上記のコードはArrayIndexOutOfBound
例外をスローしています。作業負荷を分割する方法 (行 vs 列 vs 小さなグリッド。現在、行ごとに分割しています) としきい値の決定方法について提案してください。
java - タイムアウト後に awaitQuiescence が戻らない
ForkJoinPool の awaitQuiescence メソッドを使用して、送信されたすべてのタスクが完了するまで待機するか、タイムアウト後にタスクがまだ完了していない場合は false を返そうとしています。
事実上、サブミットされたすべてのタスクが追加のタスクをプールに追加できるため、awaitTermination メソッドは使用できません。これらの追加のタスクがサブミットされないようにするためです。ただし、awaitQuiescence は、指定された時間が経過しても何も返しません。
以下のコードで問題を具体化しようとしました。CountDownLatch.await は決してトリガーされませんが、なぜ awaitQuiescence メソッドは false を返さないのでしょうか?
どうもありがとう!
multithreading - Java8 ForkJoinPool と Executors.newWorkStealingPool の詳細な違いは?
使用時の低レベルの違いは何ですか:
と
ここで、 Xは必要な並列処理のレベル、つまり実行中のスレッドです。
ドキュメントによると、私はそれらが似ていることがわかりました。また、通常の使用ではどちらがより適切で安全か教えてください. BufferedWriterに書き込む 1 億3000万のエントリがあり、Unix ソートを使用して 1 列目でソートします。
また、可能であれば保持するスレッドの数も教えてください。
注:私のシステムには8コアのプロセッサと32 GB の RAM があります。