Stream API는 실행 방식에서 추상화 된 방식으로 계산을 쉽게 작성하고 순차적 및 병렬 간을 쉽게 전환 할 수 있도록 설계되었습니다.
그러나 그것이 쉽다고해서 항상 좋은 생각을 의미하는 것은 아니며, 사실, 당신이 할 수 있기 때문에 모든 곳 을 버리는 것은 나쁜 생각 .parallel()
입니다.
첫째, 병렬 처리는 더 많은 코어를 사용할 수있는 경우 빠른 실행 가능성 외에 다른 이점을 제공하지 않습니다. 병렬 실행에는 순차적 인 작업보다 항상 더 많은 작업이 필요합니다. 문제를 해결하는 것 외에도 하위 작업의 디스패치 및 조정도 수행해야하기 때문입니다. 여러 프로세서에서 작업을 분할하여 더 빨리 답변을 얻을 수 있기를 바랍니다. 이것이 실제로 발생하는지 여부는 데이터 세트의 크기, 각 요소에 대해 수행하는 계산량, 계산의 특성을 포함하여 많은 일에 달려 있습니다 (특히 한 요소의 처리가 다른 요소의 처리와 상호 작용합니까?) , 사용 가능한 프로세서 수 및 해당 프로세서와 경쟁하는 다른 작업 수입니다.
또한, 병렬 처리는 종종 순차적 구현에 의해 숨겨지는 계산에서 비결정론을 종종 노출한다는 점에 유의하십시오. 때때로 이것은 중요하지 않거나 관련된 작업을 제한하여 완화 할 수 있습니다 (즉, 축소 연산자는 상태 비 저장 및 연관이어야 함).
실제로 병렬 처리로 인해 계산 속도가 빨라지고 때로는 계산 속도가 느려지지 않으며 때로는 속도가 느려질 수도 있습니다. 순차적 실행을 사용하여 먼저 개발 한 다음 병렬 처리를 적용하는 것이 가장 좋습니다.
(A) 실제로 성능 향상에 이점이 있다는 것을 알고
(B) 실제로 향상된 성능을 제공 할 것입니다.
(A)는 기술적 문제가 아닌 비즈니스 문제입니다. 성능 전문가 인 경우 일반적으로 코드를보고 (B)를 결정할 수 있지만 현명한 길은 측정하는 것입니다. (그리고 (A)를 확신 할 때까지 귀찮게하지 마십시오. 코드가 충분히 빠르면 뇌주기를 다른 곳에 적용하는 것이 좋습니다.)
병렬 처리의 가장 간단한 성능 모델은 "NQ"모델입니다. 여기서 N은 요소 수이고 Q는 요소 당 계산입니다. 일반적으로 성능 이점을 얻으려면 제품 NQ가 일부 임계 값을 초과해야합니다. "1에서 N까지의 숫자 추가"와 같은 Q가 낮은 문제의 경우 일반적으로 N = 1000에서 N = 10000 사이의 손익분기 점이 표시됩니다. Q 문제가 높을수록 더 낮은 임계 값에서 손익분기 점이 발생합니다.
그러나 현실은 매우 복잡합니다. 따라서 전문 지식을 얻을 때까지 순차적 처리로 인해 실제로 비용이 드는 시점을 파악한 다음 병렬 처리가 도움이되는지 측정하십시오.