데이터 병렬 처리 는 원본 컬렉션 또는 배열의 요소에서 동일한 작업이 동시에(즉, 병렬로) 수행되는 시나리오를 나타냅니다. 데이터 병렬 작업에서 원본 컬렉션은 여러 스레드가 서로 다른 세그먼트에서 동시에 작동할 수 있도록 분할됩니다.
TPL(작업 병렬 라이브러리)은 클래스를 통한 System.Threading.Tasks.Parallel 데이터 병렬 처리를 지원합니다. 이 클래스는 for 및 foreach 루프(For
및 For Each
Visual Basic)의 메서드 기반 병렬 구현을 제공합니다.
Parallel.For 또는 Parallel.ForEach 루프에 대한 루프 논리는 순차 루프를 작성하는 것처럼 작성합니다. 스레드 또는 큐 작업 항목을 만들 필요가 없습니다. 기본 루프에서는 잠금을 걸지 않아도 됩니다. TPL은 모든 하위 수준 작업을 처리합니다. 사용에 관한 자세한 내용은 Parallel.For 및 Parallel.ForEach을 사용하여 문서 병렬 프로그래밍 패턴: .NET Framework 4로 병렬 패턴 이해 및 적용을 다운로드하십시오. 다음 코드 예제에서는 간단한 foreach
루프와 동일한 병렬 루프를 보여줍니다.
비고
이 설명서는 람다 식을 사용하여 TPL에서 대리자를 정의합니다. C# 또는 Visual Basic의 람다 식에 익숙하지 않은 경우 PLINQ 및 TPL 람다 식을 참조하세요.
// Sequential version
foreach (var item in sourceCollection)
{
Process(item);
}
// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
' Sequential version
For Each item In sourceCollection
Process(item)
Next
' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
병렬 루프가 실행되면 TPL은 루프가 여러 파트에서 동시에 작동할 수 있도록 데이터 원본을 분할합니다. 백그라운드에서 작업 스케줄러는 시스템 리소스 및 워크로드에 따라 작업을 분할합니다. 가능하면 워크로드가 불균형해지면 스케줄러가 여러 스레드 및 프로세서 간에 작업을 재배포합니다.
비고
사용자 고유의 사용자 지정 파티셔너 또는 스케줄러를 제공할 수도 있습니다. 자세한 내용은 PLINQ 및 TPL 및 작업 스케줄러에 대한 사용자 지정 파티셔너를 참조하세요.
Parallel.For Parallel.ForEach 두 메서드 모두 루프 실행을 중지하거나 중단하고, 다른 스레드에서 루프의 상태를 모니터링하고, 스레드-로컬 상태를 유지 관리하고, 스레드-로컬 개체를 마무리하고, 동시성 수준을 제어할 수 있는 여러 오버로드가 있습니다. 이 기능을 사용하도록 설정하는 도우미 유형에는 ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken, 및 CancellationTokenSource 등이 포함됩니다.
자세한 내용은 병렬 프로그래밍 패턴: .NET Framework 4를 사용하여 병렬 패턴 이해 및 적용을 참조하세요.
선언적 또는 쿼리와 유사한 구문을 사용하는 데이터 병렬 처리는 PLINQ에서 지원됩니다. 자세한 내용은 PLINQ(병렬 LINQ)를 참조하세요.
관련 항목
제목 | 설명 |
---|---|
하는 법: 간단한 Parallel.For 루프 작성하기 | For 배열 또는 인덱싱 가능한 모든 IEnumerable<T> 소스 컬렉션에 대해 루프를 작성하는 법을 설명합니다. |
방법: 간단한 Parallel.ForEach 루프 작성하는 방법 | ForEach 루프를 모든 IEnumerable<T> 소스 컬렉션에 대해 작성하는 방법을 설명합니다. |
방법: Parallel.For 루프에서 중지 또는 중단 | 모든 스레드가 작업에 대해 알 수 있도록 병렬 루프를 중지하거나 중단하는 방법을 설명합니다. |
방법: Thread-Local 변수와 함께 Parallel.For 루프 작성하기 | 각 스레드가 다른 스레드에 표시되지 않는 프라이빗 변수를 유지하는 루프를 작성하는 For 방법과 루프가 완료될 때 모든 스레드의 결과를 동기화하는 방법을 설명합니다. |
방법: Partition-Local 변수를 사용하여 Parallel.ForEach 루프 작성 | 각 스레드가 다른 스레드에 표시되지 않는 프라이빗 변수를 유지하는 루프를 작성하는 ForEach 방법과 루프가 완료될 때 모든 스레드의 결과를 동기화하는 방법을 설명합니다. |
방법: Parallel.For 또는 ForEach 루프 취소 | 를 사용하여 병렬 루프를 취소하는 방법을 설명합니다. System.Threading.CancellationToken |
방법: 작은 루프 본문 속도 높이기 | 루프 본문이 매우 작은 경우 실행 속도를 높일 수 있는 한 가지 방법을 설명합니다. |
TPL(작업 병렬 라이브러리) | 작업 병렬 라이브러리에 대한 개요를 제공합니다. |
병렬 프로그래밍 | .NET Framework에서 병렬 프로그래밍을 소개합니다. |
참고하십시오
.NET