자바 포크 / 가입 프레임 워크 무엇입니까 7.0 (병렬 프로그래밍)?

포크 / 가입 프레임 워크는 자바에 도입 된 7 멀티 스레딩 / 병렬 프로그래밍 문제를 해결하기 위해.

동시에 취급하는 것은 매우 어렵다 (평행) 전통적인 방법을 사용하여 프로그래밍. 당신은 스레드 동기화 처리해야하기 때문에, 공고, 등 공유 자원 또한 함정에 가입. 다른 지역 사회의 노력에 의해 입증으로 자바 플랫폼에서 동시 프로그래밍 언어 수준의 지원은 매우 강하다. 이 사회는 모두 멀티 스레드 및 분산 applications.Java 플랫폼과 관련된 통증 점을 추상화 포괄적 인 프로그래밍 모델과 효율적인 구현을 제공하기 위해 노력, 일반용 (자바 SE) 5 다음 자바 SE 6 패키지들의 세트를 도입 (실행 프로그램 서비스)강력한 동시성 빌딩 블록을 제공하는. 자바 SE 7 또한 병렬 처리에 대한 더 많은 지원을 추가하는 프레임 워크를 강화.

포크 / 가입은 자바의 새로운 개념이다 7.0 version. 이러한 구조의 기본적인 목적은 자바 애플리케이션의 멀티 쓰레딩 환경을 용이하게하는 것이다. 미세한 다음 실행 프로그램 서비스 프레임 워크는 포크 / 조인 프레임 워크. 그것은 모든 처리 능력의 이점을 가져 오며, 따라서 애플리케이션은 더 많은 자원 처리 능력을 얻는. 그것은 당신이 다중 프로세서를 활용하는 데 도움이 ExecutorService입니다 인터페이스의 구현입니다. 그것은 빠르게 처리 할 재귀 때문에 작은 조각으로 나눌 수 있습니다 작품을 위해 설계되었습니다.

ExecutorService입니다 유사, 포크는 / 프레임 워크는 스레드 풀의 작업자 스레드에 작업을 분배 가입. 그러나 주요 차이점은 포크 / 틀을 조인하는 작업 도난 알고리즘을 사용. 여기에해야 할 일들이 부족 작업자 스레드는 여전히 바쁘다 다른 스레드에서 작업을 훔칠 수. ForkJoinPoolclass는 AbstractEx​​ecutorService의 확장과 프레임 워크의 핵심이다. ForkJoinPool는 핵심 업무 훔치는 알고리즘을 구현하고 ForkJoinTasks을 실행.
지금 나에게 세부 개념을 이해하기 위해 예를 보자.

기본 단계는
· 작업을 분할
· 사용 가능한 스레드에 할당
· 종료 후 청크 가입하고 완료 할

우리가 무작위로 생성 된 정수의 큰 숫자를 포함하는 목록을 보자.

이 클래스는 작업을 할 수있는 전통적인 방법을 보여주고있다.

package javablog.levent.com;
import java.util.Random;
// This class defins a list which will contain large number of integers.
public class LargeInteger {
private final int[] list = new int[2000000];
public largeInteger() {
Random generator = new Random(19580427);
for (int i = 0; i < list.length; i++) {
list[i] = generator.nextInt(500000);
}
}
public int[] getList() {
return list;
}
}

이제 다음 SplitTask 클래스는 분할을 수행하고 작업에 참여한다.

package javablog.levent.com;
import java.util.Arrays;
import jsr166y.forkjoin.RecursiveAction;
public class SplitTask extends RecursiveAction {
private int[] list;
public long result;
public SplitTask(int[] array) {
this.list = array;
}

@ 재정의
보호 무효 계산() {
면 (크고 List.length == 1) {
결과 = 목록[0];
} 그밖에 {
INT의 중간 점 = 크고 List.length / 2;
INT[] L1 = Arrays.copyOfRange(명부, 0, 중간 점);
INT[] L2 = Arrays.copyOfRange(명부, 중간 점, 크고 List.length);
SplitTask S1 = 새로운 SplitTask((L1));
SplitTask S2 = 새로운 SplitTask((L2));
forkJoin((S1), (S2));
결과 = s1.result + s2.result;
}
}
}

지난 시간은 프로세스를 테스트. 이 태스크를 수행하기 ForkJoinExecutor 풀 호출되고.

package javablog.levent.com;
import jsr166y.forkjoin.ForkJoinExecutor;
import jsr166y.forkjoin.ForkJoinPool;
import javablog.levent.com.SplitTask;
public class TestForkJoin {
public static void main(String[] args) {
LargeInteger test = new LargeInteger();
// Check the number of available processors
int nThreads = Runtime.getRuntime().availableProcessors();
System.out.println(nThreads);
SplitTask mfj = new SplitTask(test.getList());
ForkJoinExecutor pool = new ForkJoinPool(nThreads);
pool.invoke(mfj);
long result = mfj.getResult();
System.out.println("Done. Result: " + result);

}
}

============================================= ============================================== 아마존에서 최고의 Techalpine 책을 구입하십시오,en,전기 기술자 CT 밤나무 전기,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share