mobile menu

The Arrow Newsletter

mobile menu

c# parallel 예제

집계는 깔끔한 솔루션을 제공합니다. 이 경우 어큐뮬레이터는 앞의 예제에서 letterFrequencies 배열과 같은 배열입니다. 집계를 사용하는 순차 버전은 다음과 같습니다: 따라서 진행하기 전에 병목 현상이 병렬 코드에 있는지 확인하는 것이 좋습니다. 또한 코드가 계산 집약적이어야 하는지 여부를 고려해 볼 필요가 있습니다. 그러나 일부 최적화 기술로 인해 코드 병렬화가 어려워질 수 있다는 점에서 단점이 있습니다. 작업 병렬 처리는 PFX를 사용하여 병렬화에 대한 최저 수준의 접근 방식입니다. 이 수준에서 작업하는 클래스는 System.Threading.Tasks 네임스페이스에 정의되어 있으며 다음을 구성합니다. 쿼리 연산자 및 PLINQ를 기본값으로 설정합니까?” 다음 예제에서는 세 개의 자식 작업을 시작 하며 각 NullReferenceException을 throw 합니다. 그런 다음 부모의 연속을 통해 한 번에 모든 응용 프로그램을 잡을 수 있습니다: LINQ 쿼리에 대한 기존 응용 프로그램을 검색하고 병렬화실험을 하는 것이 좋습니다.

LINQ가 가장 좋은 솔루션인 대부분의 문제는 매우 빠르게 실행되는 경향이 있으므로 병렬화를 통해 이점을 얻지 못하기 때문에 일반적으로 비생산적입니다. 더 나은 방법은 CPU를 많이 사용하는 병목 현상을 찾은 다음 “LINQ 쿼리로 표현할 수 있습니까?” (이러한 구조 조정의 환영 부작용은 LINQ일반적으로 코드를 더 작고 읽기 쉽게 만든다는 것입니다.) 병렬화로 인한 이득은 1,000만 개의 잠금을 획득하는 비용과 결과 차단으로 상쇄되는 것보다 더 큽입니다. 대부분의 쿼리의 경우 원래 입력 순서는 중요하지 않으므로 AsOrdered는 기본값이 아닙니다. 즉, AsOrdered가 기본값인 경우 최상의 성능을 얻으려면 대부분의 병렬 쿼리에 AsUnordered을 적용해야 하므로 부담스러울 수 있습니다. 범위 분할은 일반 입력 측 열거권을 우회하고 입력 시퀀스에 대한 경합을 피하면서 각 작업자에게 동일한 수의 요소를 할당합니다. 그러나 일부 스레드가 쉬운 요소를 얻고 일찍 끝내는 경우 나머지 스레드가 계속 작동하는 동안 유휴 상태로 유지됩니다. 우리의 이전 소수 계산기는 범위 분할과 제대로 수행 할 수 있습니다.