読み方 : どうきアイオー
同期I/O【syncronous I/O】ブロッキングI/O/blocking I/O
概要

同期I/Oでは、プログラムが外部装置に対するデータの読み込みや書き込みを要求すると、その処理が完了するまで後続の命令は実行されない。外部装置からの応答やデータ転送が終わり、完了が通知されてから、停止していた箇所の続きへ処理が戻る。
処理の流れが一本道であるため制御の構造は単純で、プログラムの設計や実装が容易になる。また、I/Oの完了を確認してから次の命令へ進むため、データの整合性を保ちやすく、予期せぬタイミングでデータが書き換わるような不具合も生じにくい。
一方、CPUに比べてストレージやネットワークといった外部装置の動作速度は極めて遅く、I/Oが発生する度にCPUが待機状態となる。その間は他の処理を進められないため、CPU資源を十分に活用できず、システム全体のスループットが低下する。ネットワーク通信のように遅いだけでなく応答時間が不規則、予測困難な処理では、この影響がさらに大きくなる。
こうした待機時間の問題を回避する方式が「非同期I/O」(ノンブロッキングI/Oとも呼ばれる)である。I/O処理の完了を待たずに後続の処理を並行して進め、完了の通知を受けた時点で結果を処理する。CPUの遊休時間が減るため、多数のI/Oが発生するWebサーバやデータベースサーバなどでは処理効率が大幅に向上する。
ただし、データの到着順序の管理や割り込み処理の制御が必要になり、プログラムの設計は複雑化する。なお、「同期I/O」「非同期I/O」という名称は結果の受け取り方を指し、「ブロッキングI/O」「ノンブロッキングI/O」は呼び出し時に待機が発生するか否かを指す。厳密には区別されるが、一般には同義として扱われることが多い。
(2026.6.9更新)