.NET은 직접 스레드 함께 놀러하지 않고 병렬 루프를 실행할 수 있습니다 Parallel.For 있습니다.
는 자바에서 비슷한 일이 있습니까?"동시성 유틸리티 JSR 166에서"
그래서, 그들은 뭔가를 넣어했다 : 나는 자바의 최신 버전이 있다고 주장하는 나왔다 전에 그러나 그것은 질문을 받았다, 동일한 질문 (Here를) 발견 ?
.NET은 직접 스레드 함께 놀러하지 않고 병렬 루프를 실행할 수 있습니다 Parallel.For 있습니다.
는 자바에서 비슷한 일이 있습니까?"동시성 유틸리티 JSR 166에서"
그래서, 그들은 뭔가를 넣어했다 : 나는 자바의 최신 버전이 있다고 주장하는 나왔다 전에 그러나 그것은 질문을 받았다, 동일한 질문 (Here를) 발견 ?
는 포크/가입 프레임 워크는 람다/폐쇄와 함께 ... 최근 안젤리카 랑거, 자바 챔피언스
내 병렬 컴퓨팅 교수의 하나 그 주제에 대한 좋은 연설이 있었다, 자바 (8)에 포함되어야한다 앨런 카민스키 (Alan Kaminsky)와 그의 무리의 대학원생은 필요한 기능을 갖춘 도서관을 작성했습니다.
Javadocs, 라이센스, 다운로드 및 무료 도서까지 모두 정보 페이지에서 다룹니다. 이 Parallel.For는 ExecutorService.submit에 시뮬 것을 제안 할 수 있지만
그것은 자유 소프트웨어는 GNU GPL 버전 3
에서, 난 그렇지 생각한다.
public static void main(String... args) throws InterruptedException {
long start1 = System.nanoTime();
int runs1 = 1000;
final int[] a = new int[100];
for (int j = 0; j < runs1; j++) {
for (int i = 0; i < 100; i++) {
a[i] = a[i] * a[i];
}
}
long time1 = System.nanoTime() - start1;
System.out.printf("Each loop took an average of %,d micro-seconds%n", time1/runs1/1000);
int processors = Runtime.getRuntime().availableProcessors();
long start2 = System.nanoTime();
ExecutorService executor = Executors.newFixedThreadPool(processors);
for (int j = 0; j < runs1; j++) {
for (int i = 0; i < 100; i++) {
final int i2 = i;
executor.submit(new Runnable() {
public void run() {
a[i2] = a[i2] * a[i2];
}
});
}
}
executor.shutdown();
executor.awaitTermination(1, TimeUnit.SECONDS);
long time2 = System.nanoTime() - start2;
System.out.printf("Parallel: Each loop took an average of %,d micro-seconds%n", time2/runs1/1000);
}
인쇄
Each loop took an average of 2 micro-seconds
Parallel: Each loop took an average of 149 micro-seconds
이이 예제에서는, 다중 스레드를 사용하는 것은 매우 나쁜 생각 것을 보여준다. 그래서 루프가 약간 더 효율적
for (int j = 0; j < runs1; j++) {
for (int i = 0; i < processors; i++) {
final int i2 = i;
executor.submit(new Runnable() {
public void run() {
for (int i3 = i2 * 100/processors; i3 < (i2 + 1) * 100/processors && i3 < 100; i3++)
a[i2] = a[i2] * a[i2];
}
});
}
}
인쇄
Parallel: Each loop took an average of 28 micro-seconds
당신은 실행 가능한의 코드가 스레드로부터 안전하지 않습니다 것을 고려하는 경우
것을 희망, 나는 Parallel.For 오히려 다른 무언가를 의심 또는 그것의 꽤 무의미한.
나는 귀하의 질문에 대한 답변을 [here] (http://stackoverflow.com/a/4010275/1221734) 믿습니다. – gkaran89
나는 그 질문을 제기했다. 나는 그것에 연결했다. 나는 공식적인 것이 있는지 궁금 하네. – Haedrian
@MarkByers - 이미 말했어. 저도 똑같은 질문에 연결되어 있습니다. Java 1.7에서 뭔가를 넣었는지 물어볼 것입니다. – Haedrian