목록의 요소에 대해 철저한 쌍 비교를 수행하는 방법을 병렬 처리해야합니다. 직렬 구현은 간단합니다 :같은 목록에 중첩 된 Parallel.ForEach 루프가 있습니까?
foreach (var element1 in list)
foreach (var element2 in list)
foo(element1, element2);
이 경우 foo는 element1 또는 element2의 상태를 변경하지 않습니다. 나는 간단하게 할 중첩 Parallel.ForEach 문에 안전하지 알고 :
Parallel.ForEach(list, delegate(A element1)
{
Parallel.ForEach(list, delegate(A element2)
{
foo(element1, element2);
});
});
은 무엇 병렬 작업 라이브러리를 사용하여이를 구현하는 이상적인 방법이 될 것이다?
병렬 작업이 있기 때문에 - 그보다 더 똑똑합니다. –
물론 아닙니다. 기본적으로 코어로 스레드를 만듭니다. 그러나 문제는 각 반복 후에 어느 스레드가 다음 반복을 실행해야하는지 찾기 위해 시간을 할애한다는 것입니다. –
많은 스레드가있을 것이라고는 생각하지 않습니다. 모든 함수 호출에 대한 작업을 큐에 넣는 것은 각 외부 루프에 대해 PFX 엔진을 호출하는 것보다 훨씬 더 많은 오버 헤드가있을 것입니다. – Gabe