スレッド プール API
スレッド プール アプリケーション プログラミング インターフェイス (API) は、オブジェクト ベースの設計を使用します。 次の各オブジェクトは、ユーザー モードのデータ構造で表されます。
- プール オブジェクトは、作業の実行に使用できるワーカー スレッドのセットです。 各プロセスでは、必要に応じて異なる特性を持つ複数の分離プールを作成できます。 プロセスごとに既定のプールもあります。
- クリーンアップ グループは、コールバック生成オブジェクトのセットに関連付けられます。 各クリーンアップ グループのメンバーであるすべてのオブジェクトを待機して解放する関数が存在します。 これにより、アプリケーションが作成したすべてのオブジェクトを追跡できなくなります。
- 作業オブジェクトはプールに割り当てられ、必要に応じてクリーンアップ グループに割り当てられます。 これは投稿でき、プールからのワーカー スレッドがコールバックを実行する原因となります。 1 つの作業オブジェクトに複数の投稿が未処理の場合があります。それぞれコールバックが生成されます。 リソースがないため、事後操作は失敗できません。
- タイマー オブジェクトは、コールバックのスケジュールを制御します。 タイマーの有効期限が切れるたびに、そのコールバックがワーカー プールにポストされます。 リソースがないため、タイマーの設定は失敗できません。
- 待機オブジェクトは、待機可能なハンドルを待機する待機スレッドを引き起こします。 待機が満たされるか、タイムアウト期間が経過すると、待機スレッドは待機オブジェクトのコールバックを待機のワーカー プールにポストします。 リソースがないため、待機の設定は失敗できません。
- I/O オブジェクトは、ファイル ハンドルをスレッド プールの I/O 完了ポートに関連付けます。 非同期 I/O 操作が完了すると、ワーカー スレッドは操作の状態を取得し、I/O オブジェクトのコールバックを呼び出します。
次の表では、元のスレッド プール API と現在のスレッド プール API の機能について説明します。
特徴 | 元の API | 現在の API |
---|---|---|
同期 |
RegisterWaitForSingleObject UnregisterWaitExの |
CloseThreadpoolWaitをする CreateThreadpoolWaitの SetThreadpoolWaitの WaitForThreadpoolWaitCallbacksの |
仕事 | QueueUserWorkItemの |
CloseThreadpoolWorkの CreateThreadpoolWorkの SubmitThreadpoolWorkをする TrySubmitThreadpoolCallbackの WaitForThreadpoolWorkCallbacksの |
タイマー | CreateTimerQueueの CreateTimerQueueTimerの ChangeTimerQueueTimerの DeleteTimerQueueTimerの DeleteTimerQueueExの |
CloseThreadpoolTimerをする CreateThreadpoolTimerの IsThreadpoolTimerSetの SetThreadpoolTimerの WaitForThreadpoolTimerCallbacksの |
I/O | BindIoCompletionCallbackの |
CancelThreadpoolIoの CloseThreadpoolIoをする CreateThreadpoolIoの StartThreadpoolIoをする WaitForThreadpoolIoCallbacksの |
クリーンアップ グループ | CloseThreadpoolCleanupGroupの CloseThreadpoolCleanupGroupMembersの CreateThreadpoolCleanupGroupの |
|
プール | CloseThreadpoolをする CreateThreadpoolの SetThreadpoolThreadMaximumの SetThreadpoolThreadMinimumの |
|
コールバック環境 | DestroyThreadpoolEnvironmentの InitializeThreadpoolEnvironmentの SetThreadpoolCallbackCleanupGroupの SetThreadpoolCallbackLibraryの SetThreadpoolCallbackPoolの SetThreadpoolCallbackPriorityの SetThreadpoolCallbackRunsLongの |
|
コールバック |
CallbackMayRunLong |
|
コールバックのクリーンアップ | disassociateCurrentThreadFromCallbackの FreeLibraryWhenCallbackReturns LeaveCriticalSectionWhenCallbackReturns ReleaseMutexWhenCallbackReturns ReleaseSemaphoreWhenCallbackReturns SetEventWhenCallbackReturnsの |
関連トピック