1
私の仕事では、非常に大きなテキストファイル(〜6800 kb)を解析する小さなJavaアプリケーションを開発する必要があります。そのため、それをさらに最適化して処理を進めようとしています。最初のフォークタスクとして等号(=)を使用し、2番目のフォークタスクを使用してコンマでいくつかの計算を分割する。これは、単一アプリケーションのために複数のフォークタスクを備えた良好なパフォーマンスにつながりますか?複数のフォークを使用してタスクを分割するクラスを結合する、良い方法ですか?
1)まずフォークとプロセスへの参加:
@Override
protected Map < String, String > compute() {
SplitString lineSplit = new SplitString();
Map < String, String > splitUrl = new HashMap < >();
// list size is less than limit process actual task.
if (readAllLines.size() < Constant.LIMIT) {
// splitUrl map stores the splitter lines with equal_to
splitUrl = lineSplit.splittingLines(readAllLines);
} else { // list size greater than limit splits task in to two and process it.
// split task into sub task and stores it in list
List <String> left = readAllLines.subList(Constant.ZERO, readAllLines.size()/2);
List <String> right = readAllLines.subList(readAllLines.size()/2, readAllLines.size());
SplitTask firstTask = new SplitTask(left);
SplitTask secondTask = new SplitTask(right);
// forks the firstTask
firstTask.fork();
// forks the secondTask
secondTask.fork();
// join the task in splitUrl map
splitUrl.putAll(firstTask.join());
splitUrl.putAll(secondTask.join());
}
return splitUrl;
}
2)は、第2のフォークとプロセスへの参加:
@Override
protected Map < String, Map < String, Integer >> compute() {
SplitString ruleSplit = new SplitString();
Map < String, Map < String, Integer >> response = new HashMap < >();
// list size is less than limit process actual task.
if (KeyList.size() < Constant.LIMIT) {
// splitUrl map stores the splitter lines with equal_to
response = ruleSplit.calculatingRuleTime(result, KeyList);
} else { // list size greater than limit splits task in to two and process it.
// split task into sub task and stores it in list.
List <String> left = KeyList.subList(Constant.ZERO, KeyList.size()/2);
List <String> right = KeyList.subList(KeyList.size()/2, KeyList.size());
SplitRuleTask firstTask = new SplitRuleTask(result, left);
SplitRuleTask secondTask = new SplitRuleTask(result, right);
// forks the firstTask
firstTask.fork();
// forks the firstTask
secondTask.fork();
// join the task in response map
response.putAll(firstTask.join());
response.putAll(secondTask.join());
}
return response;
}
は、誰も私を助けてくださいことができますか?
答えとして外部リンクを提供しないでください。 –
パフォーマンスを向上させるJavaスレッドプールまたはフォークとジョインを使用しますか? – usha
フォーク結合プールは、大きなタスクがある場合にパフォーマンスが向上し、堅牢なソリューションを提供しますが、オーバーヘッドはこの場合より多くなります。あなたはフォーク/ジョインプールで仕事を盗み出すことを調べる必要があります。 –