다음을 통해 공유


데이터 병렬 처리(작업 병렬 라이브러리)

데이터 병렬 처리는 소스 컬렉션 또는 배열의 요소에 대해 동일한 작업이 동시에, 즉 병렬로 수행되는 시나리오를 가리킵니다. 명령적 구문을 통한 데이터 병렬 처리는 System.Threading.Tasks.Parallel 클래스에 있는 ForForEach 메서드의 여러 오버로드에서 지원됩니다. 데이터 병렬 작업에서는 소스 컬렉션이 분할되므로 여러 스레드에서 서로 다른 세그먼트에 대해 동시에 작업을 수행할 수 있습니다. TPL은 System.Threading.Tasks.Parallel 클래스를 통해 데이터 병렬 처리를 지원합니다. 이 클래스에서는 forforeach 루프(Visual Basic의 경우 For 및 For Each)에 대한 메서드 기반 병렬 구현을 제공합니다. Parallel.For 또는 Parallel.ForEach 루프에 대한 루프 논리를 작성하는 방법은 순차 루프를 작성할 때와 상당히 비슷합니다. 스레드 또는 큐 작업 항목은 만들지 않아도 됩니다. 기본적인 루프에서는 잠금을 가져올 필요가 없습니다. TPL에서는 하위 수준의 모든 작업을 자동으로 처리합니다. 다음 코드 예제에서는 간단한 foreach 루프와 이에 해당하는 병렬 루프를 보여 줍니다.

참고참고

이 문서에서는 람다 식을 사용하여 TPL의 대리자를 정의합니다.C# 또는 Visual Basic의 람다 식에 익숙하지 않은 경우 PLINQ 및 TPL의 람다 식을 참조하십시오.

' Sequential version        
For Each item In sourceCollection
    Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
// Sequential version            
foreach (var item in sourceCollection)
{
    Process(item);
}

// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));

병렬 루프가 실행되면 TPL에서는 해당 루프가 여러 부분에서 동시에 작동할 수 있도록 데이터 소스를 분할합니다. 내부적으로는 작업 스케줄러가 시스템 리소스 및 작업 부하에 따라 작업을 분할합니다. 작업 부하가 균일하지 않게 될 경우 스케줄러에서는 가능하면 작업을 여러 스레드 및 프로세서에 다시 분산합니다.

참고참고

고유한 사용자 지정 파티셔너나 스케줄러를 지정할 수도 있습니다.자세한 내용은 PLINQ 및 TPL에 대한 사용자 지정 파티셔너작업 스케줄러를 참조하십시오.

Parallel.For 메서드와 Parallel.ForEach 메서드에는 루프 실행 중지 또는 중단, 다른 스레드의 루프 상태 모니터링, 스레드 로컬 상태 유지, 스레드 로컬 개체 종료, 동시성 수준 제어 등의 작업을 수행하는 데 사용할 수 있는 몇 가지 오버로드가 포함되어 있습니다. 이 기능을 사용할 수 있는 도우미 형식으로는 ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationTokenCancellationTokenSource가 있습니다.

자세한 내용은 데이터 병렬 처리(작업 병렬 라이브러리)를 참조하십시오.

명령적 구문 또는 쿼리와 유사한 구문을 통한 데이터 병렬 처리가 PLINQ에서 지원됩니다. 자세한 내용은 PLINQ(병렬 LINQ)를 참조하십시오.

관련 항목

제목

설명

방법: 간단한 Parallel.For 루프 작성

배열 또는 인덱싱 가능한 IEnumerable<T> 소스 컬렉션에 대한 For 루프를 작성하는 방법에 대해 설명합니다.

방법: 간단한 Parallel.ForEach 루프 작성

모든 IEnumerable<T> 소스 컬렉션에 대한 ForEach 루프를 작성하는 방법에 대해 설명합니다.

방법: Parallel.For 루프에서 중지 또는 중단

모든 스레드에 동작을 알리기 위해 병렬 루프를 중지하거나 병렬 루프에서 빠져 나오는 방법에 대해 설명합니다.

방법: 스레드 로컬 변수를 사용하는 Parallel.For 루프 작성

각 스레드가 다른 스레드에 표시되지 않는 private 변수를 유지하는 For 루프를 작성하는 방법 및 루프 완료 시 모든 스레드의 결과를 동기화하는 방법에 대해 설명합니다.

방법: 스레드 로컬 변수를 사용하는 Parallel.ForEach 루프 작성

각 스레드가 다른 스레드에 표시되지 않는 private 변수를 유지하는 ForEach 루프를 작성하는 방법 및 루프 완료 시 모든 스레드의 결과를 동기화하는 방법에 대해 설명합니다.

방법: Parallel.For 또는 ForEach 루프 취소

System.Threading.CancellationToken을 사용하여 병렬 루프를 취소하는 방법에 대해 설명합니다.

방법: 작은 루프 본문 속도 개선

루프 본문이 매우 작은 경우 실행 속도를 높일 수 있는 한 가지 방법에 대해 설명합니다.

작업 병렬 라이브러리

작업 병렬 라이브러리에 대한 개요를 제공합니다.

.NET Framework의 병렬 프로그래밍

.NET Framework의 병렬 프로그래밍에 대해 소개합니다.

참고 항목

개념

.NET Framework의 병렬 프로그래밍