자바 포크 조 인 트 프레임 의 원리 및 용법
ForkJoin 분석
1.ForkJoin
포크 조 인 트 는 JDK 1.7 이후 다 중 동시 처리 프레임 워 크 를 제공한다.ForkJoin 의 틀 의 기본 사상 은 나 누 어 다스 리 는 것 이다.무엇이 나 누 어 다스 리 는 것 입 니까?나 누 어 처리 하 는 것 은 복잡 한 계산 을 설정 한 한도 값 에 따라 여러 개의 계산 으로 분해 한 다음 에 각 계산 결 과 를 종합 하 는 것 이다.그 에 상응하는 포크 조 인 트 는 복잡 한 계산 을 하나의 임무 로 삼 는 다.분해 한 여러 개의 계산 은 하나의 하위 임무 로 삼 는 다.
2.ForkJoin 의 사용
다음은 하나의 길 이 를 1 억 으로 계산 하 는 난수 정수 배열 을 예 로 들 어 ForkJoin 의 사용 을 보 여 드 리 겠 습 니 다.
1.창설 작업
ForkJoin 프레임 워 크 를 사용 하려 면 ForkJoin 의 작업 을 만들어 야 합 니 다.ForkJoin Task 는 추상 적 인 클래스 입 니 다.저 희 는 ForkJoin Task 를 계승 하여 사용 할 필요 가 없습니다.ForkJoin 프레임 워 크 는 RecursiveAction 과 RecursiveTask 를 제공 하기 때 문 입 니 다.우 리 는 포크 조 인 트 가 우리 에 게 제공 하 는 추상 적 인 유형 중 하 나 를 계승 하고 compute 방법 을 실현 해 야 한다.
private static class SumTask extends RecursiveTask<Integer>{
//
private final static int THRESHOLD = MakeArray.ARRAY_LENGTH/10;
private int[] src; //
private int fromIndex;//
private int toIndex;//
public SumTask(int[] src, int fromIndex, int toIndex) {
this.src = src;
this.fromIndex = fromIndex;
this.toIndex = toIndex;
}
@Override
protected Integer compute() {
//
if(toIndex-fromIndex < THRESHOLD) {
int count = 0;
for(int i=fromIndex;i<=toIndex;i++) {
count = count + src[i];
}
return count;
}else {
int mid = (fromIndex+toIndex)/2;
SumTask left = new SumTask(src,fromIndex,mid);
SumTask right = new SumTask(src,mid+1,toIndex);
//
invokeAll(left,right);
//
return left.join()+right.join();
}
}
}
2.ForkJoinPool 을 사용 하여 실행task 는 ForkJoinPool 을 통 해 실 행 됩 니 다.분 단 된 하위 작업 도 현재 작업 스 레 드 의 양 끝 대기 열 에 추가 되 어 대기 열의 머리 에 들 어 갑 니 다.작업 스 레 드 에 작업 이 없 을 때 다른 작업 스 레 드 의 대기 열 끝 에서 작업 을 가 져 옵 니 다(작업 훔 치기).
public static void main(String[] args) {
ForkJoinPool pool = new ForkJoinPool();
int[] src = MakeArray.makeArray();
SumTask innerFind = new SumTask(src,0,src.length-1);
long start = System.currentTimeMillis();
pool.invoke(innerFind);//
}
3.ForkJoin 조심 하 세 요.4.567917.ForkJoin 을 사용 하여 같은 계산 임 무 를 다 중 스 레 드 로 수행 합 니 다.데이터 의 계산 속 도 를 높 일 수 있다.구 글 의 빅 데이터 처리 프레임 워 크 인 Mapreduce 는 ForkJoin 과 유사 한 사상 을 통 해다 중 스 레 드 를 통 해 빅 데이터 의 처 리 를 높이다.그러나 우 리 는 주의해 야 한다.
4.567917.이러한 다 중 스 레 드 가 가 져 온 데이터 공유 문 제 를 사용 하고 결과 의 합병 을 처리 할 때 데이터 공유 문제 가 발생 하면 가능 한 한 JDK 가 제공 하 는 병렬 용 기 를 사용 합 니 다.
4.567917.ForkJoin 도 다 중 스 레 드 방식 으로 임 무 를 처리한다.그렇다면 포크 조 인 트 를 사용 해 야 할 지 말 아야 할 지 고민 할 수 밖 에 없다.데이터 양 이 그리 많 지 않 을 때,우 리 는 포크 조 인 트 를 사용 할 필요 가 없 기 때문이다.다 중 스 레 드 는 문맥 전환 과 관련 되 기 때문이다.그래서 데이터 양 이 많 지 않 을 때 직렬 을 사용 하 는 것 이 다 중 스 레 드 를 사용 하 는 것 보다 빠르다이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.