TPL은 여러 병렬 호출을 어떻게 처리합니까?작업 병렬 라이브러리 및 다중 병렬 작업
예 : 관련없는 두 개의 콜렉션을 병렬로 처리하려고합니다. 이 작동하지만 난 TPL 스케줄러는 3 별도의 처리 방법 궁금
Parallel.Invoke(() => Parallel.ForEach(collection1,...),
() => Parallel.ForEach(collection2,...))
:
은 현재이 같은 그것을 할 (시간이 오래 걸릴 각 컬렉션의 하나 개의 항목에 대해 그 처리를 가정) 호출합니다.
다르게해야합니까? 첫째
감사합니다. 왜 오랜 반복을위한 여분의 스레드를 돌리는 것이 나쁜 것입니까? 대리인에 차단 (IO)이 많이 있습니다. MaxDOP가 낮 으면 모든 스레드가 대기하는 위험이 증가하지 않을까요? – adrianm
반복이 CPU 바인딩 (즉, 비 차단) 인 경우 악화 될 수 있습니다.이 경우 코어 수가 #보다 많으므로 매우 비효율적 인 결과를 초래할 수 있습니다. – HYildiz
그러나 반복이 막히는 경우에는 일반적으로 말한대로 일부 * 초과 가입이있는 것이 좋습니다. TPL에는 불행하게도 얼마나 많은 병렬 반복이 차단되는지 추적하고 이에 따라 DOP를 제어하는 메커니즘이 없습니다.따라서 과부하 수준이 차단 특성의 추정을 기반으로 프로그래머에 의해 설정되는 것이 가장 좋습니다. – HYildiz