병렬처리 프로그래밍 - byeonglyeolcheoli peulogeulaeming

주요 콘텐츠로 건너뛰기

이 브라우저는 더 이상 지원되지 않습니다.

최신 기능, 보안 업데이트, 기술 지원을 이용하려면 Microsoft Edge로 업그레이드하세요.

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

  • 아티클
  • 09/22/2022
  • 읽는 데 6분 걸림

이 문서의 내용

데이터 병렬 처리는 소스 컬렉션 또는 배열의 요소에서 동일한 작업이 동시에(즉, 병렬로) 수행되는 시나리오를 가리킵니다. 데이터 병렬 작업에서 소스 컬렉션은 여러 스레드가 서로 다른 세그먼트에서 동시에 작동할 수 있도록 분할됩니다.

TPL(작업 병렬 라이브러리)은 System.Threading.Tasks.Parallel 클래스를 통해 데이터 병렬 처리를 지원합니다. 이 클래스는 for 및 foreach 루프(Visual Basic에서는 ForFor Each)의 메서드 기반 병렬 구현을 제공합니다. 순차 루프를 작성하는 것과 마찬가지로 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은 루프가 동시에 여러 부분에서 작동할 수 있도록 데이터 소스를 분할합니다. 내부적으로 작업 스케줄러는 시스템 리소스 및 작업에 따라 작업을 분할합니다. 가능한 경우 스케줄러는 작업 불균형이 발생할 때 여러 스레드 및 프로세서 간에 작업을 재배포합니다.

Parallel.For 및 Parallel.ForEach 메서드 둘 다에는 루프 실행을 중지 또는 중단하고, 다른 스레드의 루프 상태를 모니터링하고, 스레드 로컬 상태를 유지 관리하고, 스레드 로컬 개체를 종료하고, 동시성 수준을 제어할 수 있도록 하는 여러 오버로드가 있습니다. 이 기능을 사용할 수 있도록 하는 도우미 형식에는 ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken 및 CancellationTokenSource가 있습니다.

자세한 내용은 병렬 프로그래밍의 패턴: .NET Framework 4의 병렬 패턴 이해 및 적용을 참조하세요.

선언적 또는 쿼리와 유사한 구문을 사용한 데이터 병렬 처리는 PLINQ에서 지원됩니다. 자세한 내용은 PLINQ(병렬 LINQ)를 참조하세요.

제목설명
방법: 간단한 Parallel.For 루프 작성 배열 또는 인덱싱 가능한 IEnumerable<T> 소스 컬렉션에 대한 For 루프를 작성하는 방법을 설명합니다.
방법: 간단한 Parallel.ForEach 루프 작성 IEnumerable<T> 소스 컬렉션에 대한 ForEach 루프를 작성하는 방법을 설명합니다.
방법: Parallel.For 루프 중지 또는 중단 모든 스레드가 작업 알림을 받도록 병렬 루프에서 중지 또는 중단하는 방법을 설명합니다.
방법: 스레드 로컬 변수를 사용하는 Parallel.For 루프 작성 각 스레드가 다른 스레드에 표시되지 않는 전용 변수를 유지 관리하는 For 루프를 작성하는 방법 및 루프 완료 시 모든 스레드의 결과를 동기화하는 방법을 설명합니다.
방법: 파티션 로컬 변수를 사용하는 Parallel.ForEach 루프 작성 각 스레드가 다른 스레드에 표시되지 않는 전용 변수를 유지 관리하는 ForEach 루프를 작성하는 방법 및 루프 완료 시 모든 스레드의 결과를 동기화하는 방법을 설명합니다.
방법: Parallel.For 또는 ForEach 루프 취소 System.Threading.CancellationToken을 사용하여 병렬 루프를 취소하는 방법을 설명합니다.
방법: 작은 루프 본문 속도 개선 루프 본문이 매우 작을 때 실행을 가속화하는 한 가지 방법을 설명합니다.
TPL(작업 병렬 라이브러리) 작업 병렬 라이브러리에 대해 간략하게 설명합니다.
병렬 프로그래밍 .NET Framework의 병렬 프로그래밍을 소개합니다.

참조

  • 병렬 프로그래밍

주요 콘텐츠로 건너뛰기

이 브라우저는 더 이상 지원되지 않습니다.

최신 기능, 보안 업데이트, 기술 지원을 이용하려면 Microsoft Edge로 업그레이드하세요.

.NET의 병렬 프로그래밍: 설명서에 대한 가이드

  • 아티클
  • 09/22/2022
  • 읽는 데 3분 걸림

이 문서의 내용

많은 개인용 컴퓨터 및 워크스테이션에는 여러 CPU 코어가 있기 때문에 다중 스레드를 동시에 실행할 수 있습니다. 하드웨어를 활용하기 위해 코드를 병렬화하여 작업을 여러 프로세서에 분산할 수 있습니다.

이전의 병렬화에서는 스레드 및 잠금에 대한 저수준 조작이 필요했습니다. Visual Studio 및 .NET에서 런타임, 클래스 라이브러리 형식 및 진단 도구를 제공하여 병렬 프로그래밍 지원이 향상됩니다. .NET Framework 4에 도입된 이 기능은 병렬 개발을 단순화하므로, 스레드 또는 스레드 풀에 대해 직접 작업할 필요 없이 효율적이고 세분화된, 확장성 있는 병렬 코드를 자연스러운 언어로 작성할 수 있습니다.

다음 그림은 .NET의 병렬 프로그래밍 아키텍처에 대한 간략한 개요를 제공합니다.

병렬처리 프로그래밍 - byeonglyeolcheoli peulogeulaeming

기술설명
TPL(작업 병렬 라이브러리) System.Threading.Tasks.Parallel 및 For 루프의 병렬 버전을 포함하는 ForEach 클래스 및 비동기 작업에 대한 선호되는 표현 방식을 나타내는 System.Threading.Tasks.Task 클래스의 설명서를 제공합니다.
PLINQ(병렬 LINQ) 여러 시나리오에서 성능을 대폭 향상시키는 LINQ to Objects의 병렬 구현입니다.
병렬 프로그래밍을 위한 데이터 구조 스레드로부터 안전한 컬렉션 클래스, 간단한 동기화 형식 및 초기화 지연 관련 형식에 대한 설명서의 링크를 제공합니다.
병렬 진단 도구 작업 및 병렬 스택의 Visual Studio 디버거 창에 대한 설명서와 Concurrency 시각화에 대한 설명서로 연결되는 링크를 제공합니다.
PLINQ 및 TPL에 대한 사용자 지정 파티셔너 파티션 작동 방식 및 기본 파티션을 구성하거나 새 파티션을 만드는 방법에 대해 설명합니다.
작업 스케줄러 스케줄러 작동 방식 및 기본 스케줄러의 구성 방법에 대해 설명합니다.
PLINQ 및 TPL의 람다 식 C# 및 Visual Basic으로 작성된 람다 식의 간략한 개요를 제공하고, 람다 식이 PLINQ 및 작업 병렬 라이브러리에서 사용되는 방식을 보여 줍니다.
추가 정보 .NET의 병렬 프로그래밍과 관련된 추가 정보 및 샘플 리소스에 대한 링크를 제공합니다.

참조

  • 관리되는 스레딩
  • 비동기 프로그래밍 패턴