問題タブ [fork-join]
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.
groovy - GPars を使用したフォーク/ジョインの例
ここで GPars の fork/join の例を見つけました: Fork/Join
動作し、正しい数のファイルを返しますが、残念ながら次の行がわかりません:
どのように正確に動作count
し、childrenResult
? にパラメーターとして渡されるの
はなぜですか?0
sum()
java - scala.concurrent.forkjoin.ForkJoinPoolとjava.util.concurrent.ForkJoinPool
ForkJoinPoolがScalaのためにフォークされたのはなぜですか?
どの実装とどのケースが好ましいですか?
scala - Futures.awaitすべてのScala2.10での置き換え
先物のセットをスポーンし、すべてが失敗または成功するまで待つ必要があります。
最近のScala2.10にはそのようなものが含まれていませんか、それとも私は何かを逃しましたか?
scala - ForkJoinPoolのsetMaximumPoolSizeの置き換え
Scala 2.9。*以降、setMaximumPoolSize
メソッドが消えたForkJoinPool
ように見え、私が望むことを実行しているように見えることに気づきました。Scalaの並列コレクションで並列処理を制限することに関するほとんどの議論は、同じクラスのメソッドを中心にしてsetParallelism
います(これも消えましたが、私にとってはそれほど問題ではありません)が、私の場合、並列タスクは外部IOを実行でき、多くの場合ブロックされますその上に。次にForkJoinPool
、その場合により多くのスレッドを起動し、問題の共有IOリソースに対してDOSを効果的に実行しますが、これは望ましくありません。
何らかの方法でプール内のスレッドの数を制限する方法はありますか?IOでブロックされたときにスポーンする動作についてはあまり気にしませんが、IOタスクは独立しており、相互に干渉しないため、ある程度の並列処理が必要です。
java - Java 7 の fork/join フレームワークは、利用可能なすべての CPU パワーを使用していません
私はJava の fork-join フレームワークを使用して、CPU を集中的に使用する計算を処理しています。
「シーケンシャルしきい値」(サブタスクを作成するか、作業を実行するかを決定するために使用)を少し調整しましたが、残念なことに、シングルスレッドから 4 + 4 コアに移行しても、全体的なパフォーマンスは約 2 倍になります。プールは 8 個の CPU を報告し、手動で 2、3、4 を設定すると、パフォーマンスが徐々に向上しますが、それでもシングル スレッド スループット全体の約 2 倍に達します。また、Linux システム アクティビティ モニタは、その Java プロセスの約 50% を維持します。
また、非常に疑わしいのは、複数の Java プロセスを開始すると、全体のスループットがより一致し (単一のスレッドよりもほぼ 4 倍高速)、システム アクティビティ モニターの CPU 使用率が高くなるという事実です。
Java、Linux、または fork/join フレームワークのいずれかに、CPU のフル使用を禁止する制限がある可能性はありますか? 提案や同様の経験はありますか?
注意。これは、Linux Mint ボックスで Oracle Java 7r13 を実行する、4 つのコアと 4 つのハイパースレッド コアを備えた Intel 3770 CPU 上にあります。
java - この場合、ForkJoinPool を ExecutorService より速くすることはできますか?
ForkJoinPoolにプール内の追加のスレッドを 1 つ与える限り、ExecutorService と同じくらい高速に実行されます。使用される 3 つのクラスは次のとおりです: Main、RunnableTask、および ForkJoinTask。16コアボックスで実行すると、プログラムは毎回次のように出力します: Executor Time: 5002 ForkJoin Time: 5002
メインクラス:
実行可能なクラス:
RecursiveTask クラス:
java - Java で Executor を使用してファイルを書き込む
私はList<Map<String,String>>
ieを持っています。マップのリスト。各マップにはFile Name
asKey
とFile Content
asがありValue
ます。
上記のリストには 25 万ルピー以上のマップがあります。私の要件は、このリストを反復処理し、各マップ キーと値を読み取る出力フォルダーにファイルを作成することです。したがって、最終的には 250 万個のファイルが作成されます。4時間以上かかります。次に、プログラムを停止します。25lakh のレコード全体に対してプログラムを実行した場合にかかる正確な時間はわかりません。
マルチスレッドを使用してこれを最適化する必要があります。
Javaを使用してこれを最適化するにはどうすればよいですかExecutors/ Fork/ Join
(私は持っていますJava 7
)
java - Java 7 の fork/join は、別の CPU でのスレッドの実行を保証しますか?
最近、Java 7 の fork/join フレームワークについて知りました。私が学んだことは、それが分割統治のような問題に役立つ可能性があるということです。
私の質問は、フレームワークが別々の CPU でスレッドを実行することを保証するかどうかです。または、並行パッケージのクラスを使用して作成したスレッドに、サーバーで使用可能な別の CPU で実行するように指示することはできますか?