2017-03-22 13 views
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; 
} 

사람이 나를 도와주세요 수 있습니까?

답변

0

포크 또한 중량 프로세스를 만듭니다. 스레드 개념을 읽은 다음 멀티 스레딩을 구현하는 것이 좋습니다. 더 많은 사전 방법은 작업 할 스레드 풀을 만드는 것입니다. 아래 링크를 읽는 것이 좋습니다.

+0

대답으로 외부 링크를 제공하지 마십시오 –

+0

더 나은 성능을 제공하는 Java Thread Pool 또는 fork and join을 사용합니까? – usha

+0

포크 결합 풀은 큰 작업을 수행 할 때 더 나은 성능과 강력한 솔루션을 제공하지만이 경우 오버 헤드가 더 많습니다. Fork/join pool에서 작업을 훔쳐보아야합니다. –