I/O処理の分類まとめ
I/O処理の分類
"I/O処理準備中の振る舞い"と" I/O処理完了の連携方法"の組み合わせにより、以下の通り分類されます。
"I/O処理準備中の振る舞い"
カーネルがI/O処理の準備中*1だった際の、アプリケーションの振る舞いで、以下の通り分かれます。
"I/O処理完了の連携方法"
カーネルがI/O処理を完了した際の、アプリケーションへの連携方法で、以下の通り分かれます。
同期I/O
: アプリケーションからの問い合わせにより、処理完了を連携する。非同期I/O
: カーネルからの通知により、処理完了を連携する。
I/O処理の分類毎のシーケンス
以下サイトの内容を元に、分類毎のシーケンスの違いを見てみましょう。
Boost application performance using asynchronous I/O – IBM Developer
同期ブロッキングI/O
下図より、以下が伺えます。
ブロッキングI/O
: カーネルのI/O処理の準備完了を(initiate read I/O
からRead response
まで)、アプリケーションが待つ。同期I/O
: I/O処理の完了(Read response
)をアプリケーションが問い合わせる。
同期ノンブロッキングI/O
下図より、以下が伺えます。
ノンブロッキングI/O
: カーネルのI/O処理の準備完了を、アプリケーションが待たない。同期I/O
: I/O処理の完了をアプリケーションが問い合わせる。
非同期ブロッキングI/O
下図より、以下が伺えます。
非同期ノンブロッキングI/O
下図より、以下が伺えます。
*1:ソケット送信バッファに空きがない場合や、ソケット受信バッファにデータがない場合