I/O完了ポート(IOCP)
多数の非同期I/Oの完了通知を1つのFIFOキューに集約しつつ、実行可能なスレッド数をコンカレンシー値以下に保つスケジューリング機構を兼ねる、Windowsカーネルの仕組み。
- 概念URI
https://comcomponent.com/knowledge/iocp/
- 別名・表記
- I/O Completion Port / IOCP
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Job ObjectはI/O完了ポート(IOCP)を利用します。Job ObjectはI/O完了ポートを関連付けてプロセスの起動・終了通知を受け取れるが、その通知だけでcorrectnessを組むべきではなく監視・集計向けと位置付けられる / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- SetFileCompletionNotificationModesはI/O完了ポート(IOCP)を前提とします。FILE_SKIP_COMPLETION_PORT_ON_SUCCESSはハンドルがI/O完了ポートに関連付けられている場合にのみ意味を持つ最適化で、それが抑止できるのはI/O完了ポートへの完了パケットだけであり、OVERLAPPED.hEventのシグナルは抑止されない / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- Overlapped I/OはI/O完了ポート(IOCP)を利用します。多数の同時I/Oを少数のスレッドで受ける完了通知の経路として、ハンドルをI/O完了ポートに関連付けることができる / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はCompletionKeyを利用します。ハンドルをポートへ関連付けるときに指定するCompletionKeyが、完了パケットに含まれて「どのハンドルからの完了か」をワーカーへ伝える / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はCreateIoCompletionPortを利用します。CreateIoCompletionPortはポートの新規作成と、既存ポートへのハンドルの関連付けの両方を行う / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はGetQueuedCompletionStatusを利用します。ワーカースレッドはGetQueuedCompletionStatusを呼んでポートのキューから完了パケットを1つ取り出す / 確度: 確立した関係 / 確認日: 2026-08-01 出典 出典
- GetQueuedCompletionStatusExはI/O完了ポート(IOCP)を前提とします。複数の完了パケットを一度に取り出すGetQueuedCompletionStatusExは、I/O完了ポートを対象にした拡張版で、高頻度I/Oでの呼び出し回数を減らせる / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- PostQueuedCompletionStatusはI/O完了ポート(IOCP)を前提とします。PostQueuedCompletionStatusは、非同期I/Oを発行することなく自前の完了パケットをI/O完了ポートのキューに積める / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はコンカレンシー値を利用します。コンカレンシー値は「実行可能なスレッド数」の上限として働き、完了通知のキューとスレッド数制御を一体化する仕組みの核になる / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Windowsスレッドプールの I/O APIはI/O完了ポート(IOCP)を利用します。CreateThreadpoolIo/StartThreadpoolIoは、内部でIOCPを使いながらスレッドの生成・管理を肩代わりする / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- .NETスレッドプールはI/O完了ポート(IOCP)を利用します。.NETスレッドプールは自前のI/O完了ポートを持ち、非同期I/Oのハンドルをそこに関連付ける / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ThreadPoolBoundHandle.BindHandleはI/O完了ポート(IOCP)を前提とします。ThreadPoolBoundHandle.BindHandleは、OSのハンドルをシステムスレッドプール(のI/O完了ポート)に結び付ける / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はLIFOスレッド解放を利用します。完了パケットはFIFOで積まれるが、待っているスレッドはLIFOで起こされるため、直前まで働いていた「温まった」スレッドが次のパケットも拾い、コンテキストスイッチがほぼ起きない / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はOverlapped I/Oを前提とします。カーネルのI/O完了を受け取る使い方の場合、I/O完了ポートに関連付けられるのはオーバーラップI/Oを話せるファイル・ソケット・名前付きパイプなどのハンドルに限られる。ハンドルを1つも関連付けず、PostQueuedCompletionStatusで自前の完了パケットだけを流すワークキューとして使うなら、オーバーラップI/Oは介さない。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はI/O完了待ちに対する本記事の推奨です。多数の非同期I/Oの完了通知を1つのキューに集約するI/O完了ポートは、I/O完了待ちの推奨対応である / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O完了ポート(IOCP)はOverlapped I/Oを利用します。I/O完了ポートは、OVERLAPPED構造体を使う非同期I/O(overlapped I/O)の完了通知を1つのFIFOキューに集約する / 確度: 確立した関係 / 確認日: 2026-08-01 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。