PLINQ를 사용하여 병렬 실행이 지연 실행을 통해 어떻게 작동하는지 이해하려고합니다. 다음은 간단한 예입니다.PLINQ 지연 실행
string[] words = { "believe", "receipt", "relief", "field" };
bool result = words.AsParallel().Any(w => w.Contains("ei"));
는 LINQ로, 나는 실행이 "영수증"값에 도달 값의 나머지 부분에 대한 쿼리를 실행하지 않고, true를 돌려 기대.
우리가 이것을 병렬로 수행하면 "relief"의 평가가 "receipt"결과가 반환되기 전에 시작되었을 수 있습니다. 그러나 "영수증"이 참된 결과를 초래한다는 것을 쿼리가 알게되면 다른 스레드가 즉시 응답 할 것입니까?
필자의 경우 "모든"테스트가 매우 비싸고 다른 작업을 실행하기 위해 프로세서를 비울 수 있기 때문에 이는 중요합니다.
http://msdn.microsoft.com/en-us/library/dd997425(VS.100).aspx에 따르면 지연 실행 원칙은 PLINQ와 여전히 관련이 있습니다. 측면 지점? – tbischel
@tbischel : 그들은하고, 그들은하지 않습니다 ... 그 의견은 약간 오해의 소지가 있습니다. 차이점은 LINQ에서 각 요소는 요청한 대로만 실행된다는 것입니다 (지연됨). PLINQ에서 FIRST 요청을하면,'Partitioner'이 설정되어 작업을 여러 스레드로 예약하기 시작합니다. 최종 누적 결과는 요청 될 때까지 뒤로 밀리지 않지만 요소에 대한 요청보다 먼저 처리가 발생합니다. (결과의 요소 1을 요청하면 요소 1,2,3 및 4가 모두 예약되고 즉시 "작업"이 시작될 수 있습니다 ...) –