병렬 확장

Parallel Extensions
.NET Framework 스택

Parallel Extensions는 Microsoft Research와 MicrosoftCLR 팀이 공동으로 개발한 관리 동시성 라이브러리의 개발 이름입니다.라이브러리는 버전 4.0으로 출시되었습니다.NET [1]프레임워크PLINQ(Parallel LINQ)와 Task Parallel Library(TPL)[2][3]의 두 부분으로 구성됩니다.또한 동시 [4]태스크 실행을 동기화하고 조정하는 데 사용되는 데이터 구조 세트인 CDS(조정 데이터 구조)로 구성됩니다.

병렬 LINQ

PLINQ(Parallel LINQ)는 객체(LINQ to Objects)와 XML 데이터(LINQ to XML)에 대한 쿼리 실행을 병렬화합니다.PLINQ는 [2]쿼리를 사용하여 데이터 병렬성을 노출하는 것을 목적으로 합니다.쿼리로 구현된 객체에 대한 계산은 PLINQ에 의해 병렬화할 수 있습니다.단, 오브젝트는 다음 명령어를 구현해야 합니다.IParallelEnumerablePLINQ 자체에 의해 정의됩니다.내부적으로는 [4][5]실행에 TPL을 사용합니다.

태스크 병렬 라이브러리

Task Parallel Library(TPL)는 에 대한 병렬 확장의 태스크 병렬 구성 요소입니다.NET.[6] 병렬 구조를 노출합니다.For그리고.ForEach루프는 일반 메서드콜 및 위임 기능을 사용하기 때문에 임의의 CLI 언어에서 구성을 사용할 수 있습니다.사용 가능한 프로세서의 수에 따라 스레드 수를 조정할 뿐만 아니라 스레드를 산란하고 종료하는 작업은 라이브러리 [3]자체에 의해 수행되며 작업 도용 [7]스케줄러를 사용합니다.

TPL에는 작업 미래와 같은 다른 구성 요소도 포함됩니다.태스크는 프로그램의 나머지 부분과 독립적으로 실행할 수 있는 작업입니다.그런 의미에서 이는 의미론적으로 스레드와 동등하지만, 보다 가벼운 오브젝트이며 OS 스레드 작성에 따른 오버헤드가 없다는 점이 다릅니다.태스크는 태스크 매니저 오브젝트에 의해 큐잉되며 스레드 풀의 여러 OS 스레드에서 실행되도록 예약되어 있습니다.

미래는 결과를 반환하는 작업입니다.결과는 Future 객체에 의해 캡슐화된 백그라운드 스레드로 계산되며 결과가 [3]검색될 때까지 버퍼링됩니다.결과를 계산하기 전에 검색하려고 하면 결과를 사용할 [6]수 있을 때까지 요청 스레드가 차단됩니다.

TPL의 다른 구성은 병렬 클래스입니다.TPL은 Parallel 클래스의 3가지 정적 메서드를 통해 구조화된 병렬 처리의 기본 형식을 제공합니다.

평행.호출하다
액션 위임 배열을 병렬로 실행한 후 완료될 때까지 기다립니다.
평행.위해서
C# for loop과 동등한 병렬 처리
평행.각각에 대해서
C# foreach 루프와 병행 등가

아키텍처

에 대한 병렬 확장의 주요 개념입니다.NET은Task이것은 일반적으로 람다 함수로 표현되는 코드의 작은 단위로 독립적으로 실행될 수 있습니다.PLINQ와 TPL API는 모두 태스크를 생성하는 방법을 제공합니다. PLINQ는 쿼리를 더 작은 태스크로 나눕니다.Parallel.For,Parallel.ForEach그리고.Parallel.Invoke메서드는 루프를 태스크로 나눕니다.

PFX에는 다음이 포함됩니다.Task Manager작업을 실행하도록 스케줄링하는 개체입니다.태스크 관리자에는 태스크의 글로벌 대기열이 포함되어 있으며 태스크가 실행됩니다.또한 태스크가 실행되는 여러 스레드를 캡슐화합니다.기본적으로는 시스템에 있는 프로세서(또는 프로세서 코어)의 수만큼 스레드가 생성됩니다.단, 이 수는 수동으로 변경할 수 있습니다.각 스레드는 태스크의 스레드별 큐와 연결됩니다.유휴 상태일 때 각 스레드는 작업 배치를 선택하여 로컬 대기열에 하나씩 배치하고, 여기서 작업이 실행됩니다.글로벌 큐가 비어 있는 경우 스레드는 피어 큐에서 태스크를 검색하고 큐에 가장 오래 있었던 태스크(태스크 도용)를 수행합니다.실행 시 태스크는 독립적으로 실행되며, 하나의 태스크 상태가 다른 태스크와 독립적으로 변경됩니다.따라서 공유 리소스를 사용하는 경우에도 잠금 또는 기타 구조를 사용하여 수동으로 동기화해야 합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "What's New in the .NET Framework 4". Retrieved 21 September 2011.
  2. ^ a b "Programming in the Age of Concurrency: Concurrent Programming with PFX". Retrieved 16 October 2007.
  3. ^ a b c "MSDN Magazine: Task Parallel Library". Archived from the original on 14 October 2007. Retrieved 16 October 2007.
  4. ^ a b "June 2008 CTP - Parallel Extensions to the .NET FX". Retrieved 6 August 2008.
  5. ^ "More powerful aggregations in PLINQ". Retrieved 6 August 2008.
  6. ^ a b Duffy, Joe (2009). Concurrent Programming on Windows. pp. "887–929". ISBN 978-0321434821.
  7. ^ Leijen, Daan; Schulte, Wolfram; Burckhardt, Sebastian (2009). "The Design of a Task Parallel Library". ACM SIGPLAN Notices. 44 (10): 227. CiteSeerX 10.1.1.146.4197. doi:10.1145/1639949.1640106.

외부 링크