1
제 작품에서는 매우 큰 텍스트 파일 (~ 6800 kb)을 구문 분석하는 작은 Java 응용 프로그램을 개발해야하기 때문에 프로세스를 최적화하기 위해 조금만 최적화하려고합니다. 첫 번째 포크 작업으로 등호 (=)로 라인을 분할하고 두 번째 포크 작업을 사용하여 쉼표 및 일부 계산으로 분할 할 수 있습니다. 이로 인해 단일 애플리케이션을위한 다중 포크 작업을 통해 우수한 성능을 발휘할 수 있습니까?다중 포크 및 클래스를 사용하여 분할 작업을 수행하는 것이 좋습니다.
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) 두 번째 포크와 과정에 참여 :
@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 Thread Pool 또는 fork and join을 사용합니까? – usha
포크 결합 풀은 큰 작업을 수행 할 때 더 나은 성능과 강력한 솔루션을 제공하지만이 경우 오버 헤드가 더 많습니다. Fork/join pool에서 작업을 훔쳐보아야합니다. –