2016-06-08 2 views
2

저는 Richard Warburton이 Java 8 책을 읽었습니다. 여기에 인용의 꽤 이해하지 않았다스트림의 리프 작업은 무엇입니까?

  1. 우리의 데이터 소스는 다음과 같습니다

    이의이 는 4 코어 시스템에서 병렬로 작동 할 수있는 스트림의 프레임 워크는 우리의 일을 분할한다고 가정하자 네 개의 요소 덩어리로 분해됩니다.

  2. 우리 수행 리프 계산 작업 각 스레드에 평행 [...]

리프 계산 작업 무엇인가? 그게 무슨 뜻이야?

+1

I는 대신보다 작은 덩어리로 세분화되는 단일 스레드에 의해 처리 얻을 요소의 가장 작은 청크를 처리하는 작업을 참조되었다고 가정하고있다. – Eran

답변

7

저자는 트리 - 리프 비유를 사용하여 병렬 스트림에서 작업의 세분화를 설명합니다.

트리로 할 필요가있는 작업 전체를 생각해보십시오. 트렁크는 전체 작업을 나타냅니다. 각 가지는 더 세분화 될 수있는 작업의 일부를 나타냅니다. 각 잎은 더 이상 세분되지 않는 작업량을 나타냅니다.

예를 들어 8 개 요소의 배열을 병합 정렬하는 것을 고려하십시오. 요소 0..7을 정렬하는 것이 트렁크입니다. 그것은 0..3과 4..7의 범위를 분류하기위한 두 가지 가지를 가지고 있습니다. 차례로 각 분기에는 두 요소 범위를 정렬하기위한 두 개의 잎이 있습니다.

두 요소 범위를 정렬하는 작업이 더 이상 세분화되지 않으므로 으로 간주됩니다.

Sort tree

+1

정렬 예제는 약간 혼동 스럽긴하지만 사소한 병합 단계가 필요하기 때문에 (따라서 4 개의 코어를 모두 활용할 수는 없지만 두 비 리프 노드도 병렬로 실행하는 것이 중요합니다.) 분명히 원본 소스는 더 간단한 합산 예제를 사용합니다. – Holger

+0

@Holger 사실입니다. 내 나무가 덤불처럼 보일 수 없도록 정렬을 선택했습니다 :-) – dasblinkenlight

+1

글쎄, OP가 충분히 인용하지 않았으므로 원래 예제를 검색하여 "CPU 코어 수"로 세분화하는 데 초점을 맞추는 것으로 나타났습니다. 노드는 스트림 구현과 마찬가지로 노드가 있지만 동시에 우연히 4 개의 리프 노드를 가지며 각 노드는 1/N 요소를 합산 한 다음 간단한 병합 단계를 거칩니다. ('listOfInteger .parallelStream() .mapToInt (i -> i) .sum()') – Holger

관련 문제