윈도우 프로그래밍

Win32 ThreadPool

하늘흐늘 2009. 7. 3. 03:22
반응형
MSDN: Thread Pool API 
 Thread Pool API에 대한 간략한 설명이 들어 있는 페이지 입니다. 이 페이지는 기본적으로 전 버전에서 지원하는 API들과 Window Vista에서 지원하는 새로운 Thread Pool API를 비교하며 설명하고 있습니다. 쓰레드 풀은 OS의 쓰레드 풀을 사용하는 것이고 Win2K부터 지원을 합니다.
 Thread Pool API라는 것은 OS Thread Pool에서 동작하는 API를 나열해 놓은 페이지 입니다. 그러니 API별 용도는 다릅니다. 이 글에서는 Original API를 바탕으로 하나씩 살펴볼까 합니다. 
  쓰레드 풀 쓰레드는 I/O 쓰레드와 non-I/O쓰레드 2가지 종류가 있습니다. I/O worker thread는 APC(Asynchronous Procedure Calls)로 실행되는 쓰레드 입니다. non-I/O worker thread는 I/O completion ports에서 실행됩니다. non-I/O worker thread가 I/O worker thread보다 더욱 효율적이며 I/O worker thread로 오래 걸리는 작업을 하는 것은 피하여야 합니다. I/O worker thread는 APC로 실행되는 관계로 한 쓰레드가 alertable 상태로 있는 동안 실행되니 그런듯 보입니다. 이 둘은 QueueUserWorkItem에서 flag로 설정할 수 있습니다.
[원문은 Thread Pooling이며 설명은 그리 친절하지 못합니다.]

RegisterWaitForSingleObject, UnregisterWaitEx
 지정한 Event가 Signal되거나 Time-out이 되었을 때 쓰레드풀 쓰레드에서 지정한 Callback함수를 실행합니다.

QueueUserWorkItem
 쓰레드 풀 쓰레드에서 유저 함수를 실행합니다. 주의할 점은 TerminateThread를 유저 함수에서 호출하면 안됩니다.

CreateTimerQueue, CreateTimerQueueTimer, ChangeTimerQueueTimer, DeleteTimerQueueTimer, DeleteTimerQueueEx
 쓰레드 풀 쓰레드에서 특정시간이 지난 후에 지정한 Callback함수를 실행합니다.

BindIoCompletionCallback
 쓰레드 풀이 소유한 I/O Completion port와 파일 핸들을 연결합니다. 파일에 대하여 요청한 I/O가 다 처리되었을 경우에 지정한 Callback함수가 쓰레드풀 non-I/O 쓰레드에서 실행됩니다. 예제를 찾아보려고 했는데 아쉽게도 못찾았네요. 사용하는 법은 CreateFile에 FILE_FLAG_OVERLAPPED플래그로 만든 파일 핸들을 사용하면 되니 그리 어려워 보이지는 않습니다.

그외에...
윈도우 비스타에는 새로운 쓰레드풀 생성 및 종료, Clean-up group, Callback enviroment, Callback, Callback clean up등 새롭게 추가된 API들이 많습니다.

반응형