2014-02-24 4 views
0

나는 10 회 동안 반복하고 몇 가지 상호 연관된 메소드를 실행할 때마다 루프를 수행합니다. 따라서 루프의 각 인스턴스에 대해 동일한 작업을 병렬로 수행 할 수있는 솔루션이 있습니다. ExecutorService를 사용하여 루프를 병렬 처리하여 작업 수행

1st core should execute the program for i=0,1,2,3 
2nd core should execute the program for i=4,5 
3rd core should execute the program for i=6,7 
4th core should execute the program for i=8,9 

내가 4 개 코어 실행 프로그램과 ExecutorService를에

+0

http://stackoverflow.com/questions/4010185/parallel-for-for-java – devshorts

답변

0

봐를 가정합니다. 스레드 풀을 생성하고 거기에 Runnables를 몇 개나 던질 수 있습니다.

pool.execute(myRunnable); 

는 API 문서에있는 아주 좋은 예입니다 : 그럼 당신은 그냥이 작업을 수행 할 수

ExecutorService pool = 
    Executors.newFixedThreadPool(Runtime.getRuntime().getAvailableProcessors()); 

: 당신은 코어 당 하나 개의 스레드를하려는 경우 예를 들어, 당신은 뭔가를 할 수 있습니다 : 그 루프의 각 인스턴스에 대해 동일한 작업 parallaly을 할 수있는 솔루션이 10 번과 어떤 상호 methods.So를 실행하는 각 시간에 반복 루프를 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html

+0

내 시스템에 4 개의 코어가 있고 Runtime.getRuntime(). getAvailableProcessors() 대신 10 개가 있으면 도움이됩니다. ..? – Bishnu

+0

대답 해 주셔서 감사합니다 .... 유용합니다 .. !! – Bishnu

+0

코어를 가지고있는 것보다 많은 쓰레드를 실행할 수 있습니다. 실제로는 그렇지 않습니다. CPU를 많이 사용하는 스레드가있는 경우 컴퓨터를 압도하지 않도록 풀의 스레드 수를 제한하는 것이 실제로 중요합니다. – jgitter

1

.

가장 먼저 알아야 할 점은 타사 라이브러리를 사용하지 않는 한 핵심 매핑에 대한 작업을 구체적으로 제어 할 수 없다는 것입니다. 어쨌든 이것을 수행하고 싶지는 않습니다. 단지 JVM이 그것에 대해 영리하게 두도록하십시오.

하드웨어의 모든 코어를 사용하려면 일반적으로 고정 된 스레드 풀의 스레드 수를 변경하십시오. ExecutorService에 제출 된 작업 수에 따라 작업을 증가시키는 캐시 된 스레드 풀을 사용할 수 있습니다. 현대의 JVM 및 운영 체제에서 스레 싱은 걱정할 필요가 없으므로 1000 가지 작업에 대해 이야기하지 않는 한이 방법이 효과적입니다.

하지만 일반적으로 고정 된 수의 스레드를 풀에 설정합니다. 작업이 100 % CPU 바운드이면 JVM에있는 가상 프로세서 수와 일치하도록 스레드 수를 설정할 수 있습니다. 일반적으로 로그 출력, 네트워크 트랜잭션 및 기타 IO를 사용하면 모든 프로세서를 사용하기 위해 스레드 수를 늘려야 할 수 있습니다. 다른 값으로 두 번 프로그램을 돌리고 싶습니다.

당신의 경우에는 특별히 0,1,2,3 개의 작업을 하나의 스레드에서 실행하고 4,5는 병렬로 다른 스레드에서 실행하고 싶을 것 같습니다. 이 작업을 수행하려면 ExecutorService에 4 개의 작업을 제출하고 각 작업에서 원하는 반복 번호를 실행해야합니다.

아마 같은 : 매핑을 스레드 수는 임의의 경우

executorService.submit(new MyTask(new int[] { 0, 1, 2, 3})); 
executorService.submit(new MyTask(new int[] { 4, 5 })); 

는 그냥 ExecutorService 10 개 작업을 제출하는 것과는 FIFO 방식으로 병렬로 작업을 실행합니다.

+0

내 시스템의 사용 가능한 모든 코어를 사용합니까? ?? – Bishnu

+0

@ 그레이 : "타사 라이브러리를 사용하지 않는 한"이 라이브러리 중 일부를 나열 할 수 있습니까?어떻게 일하는지 알고 싶어합니다. – kosa

+0

n 선생님 감사합니다 ... 우수 – Bishnu

관련 문제