50,000個のオブジェクトのコレクションを考えてみましょう。 各オブジェクトは、doWork()メソッドを使用して、反復ごとに10倍の2倍を生成します。これを並列に実装する最も効率的な方法は何ですか?
それぞれ50,000個のオブジェクトを処理する連続whileループがあり、 はdoWork()を呼び出します。 この後、作成された10個の2倍のそれぞれをprocess()を呼び出して処理する必要があります。
whileループ内の最後のステップでは、各繰り返しで生成された倍音を合計し、出力をログに記録する必要があります。
doWork()とprocess()の完了にかかる相対的な時間は設計によって異なりますか?
このアルゴリズムを実装する最も高速で最も効率的な方法は何ですか?
私はExecutorServiceのかForkJoinを使用する必要があります...複数のコアの使用は大いに役立つだろう作る
を想像?
タスクを分割するにはどうすればよいですか?
List<A> listA = new ArrayList<>();
populateWith50k(listA); // has 50k objects after this line
List<Double> listB = new ArrayList<>();
while(true){
// causes a side affect, hence a change of state that the remaining code
// depends on, hence I don't think we can use java streams...
changeState();
// the below depends on the system state setup above
for (int i=0;i<listA.size();i++){
A a = listA.get(i);
a.doWork();
populateUsingA(a); // populates listB, each A creates 10 doubles
for (int j=0;j<listB.size();j++){
B b = listB.get(j);
b.process();
}
sumAndThenLogValuesInListB(a);
listB.clear();
}
}
changeState()メソッドには影響があるため、機能しないかどうかはわかりませんが、複雑なために機能的なコードのスタイルでリファクタリングすることはできません。理解する。申し訳ありませんが、whileループのすべてのサイクルで依存状態の変化を引き起こす、サイドの影響に対する依存性を強調しませんでした。 – newlogic