[C# 4.0] Parallel Extension - [3] TPL(Task Parallel Library)
C# Parallel Programming 2009. 3. 1. 20:24Task Parallel Library
Parallel Extension 은 PLINQ 와 더불어 확장 가능한 Task Parallel Library 를 제공합니다. Task Parallel Library 는 PLINQ 를 이용하지 않고 개별적이고 수동적인 병렬 처리 작업을 위해 사용할 수 있습니다.
Task Parallel Library 는 크게 세 가지 방법으로 병렬 처리를 위한 Library 를 제공합니다.
Loops
[그림1] Parallel.For 를 이용한 병렬 처리
[그림2] Parallel.Foreach 를 이용한 병렬 처리
Task Parallel Extension 으로 병렬 처리를 쉽게 처리할 수 있으며, 병렬 처리로 인자값을 넘기거나 하는 작업을 쉽게 할 수 있습니다.
Statements
[그림3] Parallel.Invoke 를 이용한 병렬 처리
Task
특히 Parallel Extension Library 에서 Task 는 수동적으로 병렬 처리를 하기 위해 다양한 기능을 지원합니다. 정교하게 스레드(Thread) 를 처리했던 것에 비하면 심플하고도 직관적으로 병렬 작업을 처리할 수 있습니다.
Task 는 보다 정교하게 병렬 처리 작업을 할 수 있습니다.
l 대기
l 취소
l 연장
l 상하(부모/자식) 간의 관계
l 디버그 지원
아래는 ThreadPool.QueueUserWorkItem 처럼 바로 작업을 시작하도록 합니다.
Task.StartNew(…); |
아래는 Task 에 대해 대기 및 취소 작업을 진행하도록 합니다.
Task t1 = Task.StartNew(…);
t1.Wait();
t1.Cancel();
Task t2 = t1.ContinueWith(…); |
아래는 작업에 대해 지속적인 병렬 처리를 가능하도록 합니다.
var p = Task.StartNew(() => {
var c = Task.StartNew(…); } |
아래는 특정 작업의 결과를 받아 올 수 있습니다.
var p =
Future.StartNew(() => C());
…
int result = p.Value;
|
Coordination Data Structures
병렬 처리 작업은 PLINQ 와 TPL(Task Parallel Library) 를 지원하기 위해 기존의 데이터 컬렉션 등이 등장하였습니다. 내부적으로 동기화를 지원하지 않았던 문제들을 지원하게 되었고, 특히 오늘날 멀티 코어(Multi Core) 프로세스를 위해 많은 동기적인 문제를 고민해야 했습니다. .NET Framework 4.0 은 이러한 공통적인 문제들을 해결하기 할 수 있습니다.
l Thread-safe collections
– ConcurrentStack<T>
– ConcurrentQueue<T>
– ConcurrentDictionary<TKey,TValue>
– …
l Work exchange
– BlockingCollection<T>
– IProducerConsumerCollection<T>
l Phased Operation
– CountdownEvent
– Barrier
l Locks
– ManualResetEventSlim
– SemaphoreSlim
– SpinLock
– SpinWait
l Initialization
– LazyInit<T>
– WriteOnce<T>
'C# Parallel Programming' 카테고리의 다른 글
Welcome to Parallel C#(2) - 계속 되는 개념 찾기. (0) | 2010.05.27 |
---|---|
Welcome to Parallel C#(1) - 굿바이, 그리고 안녕~~? (0) | 2010.05.24 |
Welcome to Parellel world(1) - Here comes a new challenger! (2) | 2009.05.16 |
[C# 4.0] Parallel Extension - [2] 병렬 처리 아키텍처 (0) | 2009.02.16 |
[C# 4.0] Parallel Extension - [1] 병렬 처리 (1) | 2009.02.12 |