병렬 쿼리란 무엇인가요?
PLINQ 쿼리의 많은 측면은 비병렬 LINQ to Objects 쿼리와 유사합니다. 순차 LINQ 쿼리와 마찬가지로, PLINQ 쿼리는 메모리 내 IEnumerable 또는 IEnumerable 데이터 소스에 대해 연산을 수행<T>하고 실행을 연기합니다. 즉, 쿼리가 열거될 때까지 실행이 시작되지 않습니다. 주요 차이점은 PLINQ가 시스템 내 모든 프로세서를 최대한 활용하려고 한다는 점입니다. 이 방법은 데이터 소스를 조각들로 분할한 후, 각 조각마다 별도의 워커 스레드에서 여러 프로세서에 병렬 쿼리를 수행하는 것입니다. 많은 경우, 병렬 실행은 쿼리가 훨씬 빠르게 실행된다는 의미입니다.
병렬 실행을 통해 PLINQ는 특정 유형의 쿼리에 대해 이전 코드에 비해 성능을 크게 향상시킬 수 있으며, 종종 데이터 소스에 AsParallel 쿼리 연산을 추가하는 것만으로도 가능합니다. 하지만 병렬 처리는 자체적인 복잡성을 초래할 수 있으므로 모든 쿼리 연산이 PLINQ에서 더 빠르게 실행되는 것은 아닙니다. 사실, 병렬 처리는 일부 쿼리를 느리게 만들기도 합니다. 따라서 정렬과 같은 문제들이 병렬 쿼리에 어떤 영향을 미치는지 이해하는 것이 중요합니다. 자세한 내용은 PLINQ에서의 가속 이해를 참조하세요.
간단한 예시
컬렉션 내 10,000개의 데이터에 대한 코드는 다음과 같습니다:
PLINQ가 사용하는 기타 기능
1. AsSequential을 사용하면, 과정에서 병렬 쿼리를 사용하고 싶지 않다면, 이 기능을 사용해 순차 쿼리로 복원할 수 있습니다.
2. AsOrdered를 사용할 때, PLINQ가 병렬로 실행되기 때문에 결과가 순서가 맞지 않을 수 있으며, 이는 AsOrdered 메서드를 추가하여 쿼리할 수 있습니다.
3. WithDegreeOfParallelism을 사용하여 컴퓨터에서 병렬 CUP 수를 설정할 수 있습니다.
장면 주석
많은 경우 쿼리를 병렬화할 수 있지만, 병렬 쿼리를 설정하는 데 드는 오버헤드가 성능 향상을 상쇄할 수 있습니다.쿼리가 많은 계산을 수행하지 않거나 데이터 소스가 작을 경우, PLINQ 쿼리는 순차적인 LINQ to Objects 쿼리보다 느릴 수 있습니다。 Visual Studio Team Server의 병렬 성능 분석기를 사용해 다양한 쿼리의 성능을 비교하고, 처리 병목 현상을 찾으며, 쿼리가 병렬로 실행되는지 순차적으로 실행되는지 판단할 수 있습니다.
참조:하이퍼링크 로그인이 보입니다.
|