問題タブ [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 - すべてのスレッド リソースを消費する Java フォーク結合プール
Java フォーク結合プールで実行する必要がある文字列パーサー (大きなテキスト BLOB を解析する) があります。プールは他のスレッドよりも高速で、正規表現と xpath の両方を使用すると、解析時間が 30 分以上短縮されました。ただし、作成されるスレッドの数が劇的に増加し、スレッド プールが複数回呼び出されるため、スレッドを終了できるようにする必要があります。4 コア システムでプールを 1 コアだけに制限せずにスレッドの増加を減らすにはどうすればよいですか?
スレッド数が 40000 を超えており、プログラムが 10 回実行されており、ユーザーの実行スレッド数が 50000 スレッドに制限されているため、5000 に近づける必要があります。
この問題は、Windows と Linux の両方で発生しています。
私は:
- 最大プロセッサを利用可能なプロセッサの数*構成可能な数に設定します。現在は 1 です
- get() が呼び出された後のタスクのキャンセル
- 私は必死なので、再インスタンス化する前にforkjoinプールを必死にnullに設定します
任意のヘルプをいただければ幸いです。ありがとう。
プールを停止、取得、再起動するために使用しているコードは次のとおりです。fjp.submit(TASK) を使用して各タスクをサブミットし、シャットダウン時にすべてのタスクを呼び出していることにも注意してください。
while(pages.size()>0) { log.info("現在アクティブなスレッド: "+Thread.activeCount()); log.info("反復で見つかったページ "+j+": "+pages.size());
java - ForkJoin で最大数を見つける
ブロックがなくても機能しますが、ブロックif delay == 2
では機能しません。
ForkJoin の計算は次のとおりです。
これが私の主な方法です:
短いエラー:
スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException
at com.bg.fork_join.MainFJ.main(MainFJ.java:24) 原因: java.lang.ArrayIndexOutOfBoundsException ... 15 詳細
原因: java.lang.ArrayIndexOutOfBoundsException: 10000 at com.bg.fork_join.MyForkJoinTask.compute(MyForkJoinTask.java:31)
どこに問題があるのか教えていただけますか?
java - スレッド内でスレッドセーフ?
分子アルゴリズムをシミュレートするプログラムをJavaで書いています。分子アルゴリズムは本質的に並行性を使用するため (化学反応を供給する化学物質と濃度があれば、必要な数の化学反応を行うことができます)、並行性を使用する必要があります。
しかし、グラフ構造に使用していたパッケージがスレッドセーフではないことが最近わかりました。各スレッドに設定されたグラフの ArrayList があります。計算中に、スレッドは独自の ArrayList とその中のいくつかのグラフを変更しますが、子スレッドから 2 つの ArrayList を受け取るまで、1 つのスレッドが他のスレッドの ArrayList またはグラフを変更できるようにするコードはありません。
これを達成するために、私は ForkJoinPool を使用しています (これについての私の理解は、2 つのスレッド間でタスクを分割する 2 つのスレッド間でタスクを分割することです... 計算がリーフ スレッドで行われると、親スレッドに戻ります。ルートの子が親スレッドに戻り、ルート (ForkJoinTask の場合) が結果を返すまで続きます)。
言うまでもなく、私が望んでいることの注目すべき例外はワークスティーリングです。したがって、私の質問は、ワークスティーリングと子スレッドが親スレッドに戻ることを除いて、スレッドが他のスレッドと対話しない場合、スレッドセーフでないオブジェクトを並行アプリケーションで使用できるかどうかです。
java - Java の 1.7 ForkJoinPool での Q サイズの制限
外部 I/O を必要とし、再帰的ないくつかのタスクを実行しています。これを実現するために、古い ExecutorService から ForkJoinPool に切り替えるプロトタイプを作成しています。スレッドの時間のほとんどを I/O 待機に費やすため、並列度は明らかにコア数より高くなります。同期ネットワーク API しかないので、ここには他のオプションはありません。
古い ExecutorService では、キュー サイズを設定することで、タスクが重ならないように拒否できました。ForkJoinPool では、これは不可能のようで、Oracle 1.7 実装ではこの値に拡張されるようです。
これは、必要な非常に大きなキューです。次の機能を備えた fork/join プールの実装はありますか?
1) 作成時にスレッドに名前を付ける機能を提供する機能は? いくつかの I/O ワーカー プールがあり、どのプールがスレッドを作成して所有しているかをデバッグするのに役立ちます。
2) 最大キュー サイズを設定する機能を提供します。親タスクをスケジュールするときは、実際には 0 にする必要があります。スケジューラに容量がなく、親タスクが開始された場合、サブミットを呼び出してスケジュールを試みるスレッドで実行する必要があります。これにより、呼び出し元の速度が低下することで、自動スロットル メカニズムが提供されます。
ありがとう、トッド
java - IOException の原因となる何千もの画像の読み込みをマルチスレッド化します。
ForkJoinPool を介して大量の画像を読み込む際に問題が発生しています。ハイパースヘディングを使用して 4 コアの Intel でテストしているため、8 つの論理スレッドがあります。ただし、プールを 4 スレッドのみに制限します。また、ImageIO で画像が見つからないというエラーが表示されます。
私が間違っていることについての洞察は素晴らしいでしょう.1700以上の画像があり、すべての画像が5MB以上の場合にのみ壊れることに気付きました.
Javaから受け取ったエラーは次のとおりです。
ファイルがそこにあることを知っているとき。このコードをガイドとして使用しました: https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
java - RecursiveTask を継承する抽象クラス
問題を解決するのに問題があります。まず、RecursiveTask から継承する抽象クラスがあります。
サブクラス
私は次のようにタスクを呼び出しています。
実行すると、例外が発生します。
私が間違っていることについて誰かがヒントを与えることができますか?