【ひどうきあいおー】

非同期I/O とは?

公開:
💡 注文だけ済ませて、料理が来るまで他の仕事をする「効率派」の入出力だよ

I/O処理の完了を待たずに他の処理を進められる、OSレベルの入出力方式。async/awaitのような言語構文とは別の、システムコールレベルの概念。

📌 このページのポイント
同期I/O と 非同期I/O の違い 同期I/O スレッド:処理A実行中 I/O完了を待機中… (他の処理は進まない) I/O完了後に再開 非同期I/O I/O処理を依頼 すぐに他の処理Bへ 完了通知を受けて処理 1つのスレッドで多くのI/Oを並行して扱える
非同期I/Oのイメージ
ひよこ ひよこ
ペンギン先生、非同期I/OってJavaScriptasync/awaitと同じもの?
ペンギン先生 ペンギン先生
似ているけど別のレイヤーの話なんだよ。async/awaitは言語の書き方で、非同期I/OはOSのシステムコールレベルの仕組みなんだ。
ひよこ ひよこ
同期I/Oだと何が困るの?
ペンギン先生 ペンギン先生
同期I/Oは処理が完了するまでスレッドが止まって待ってしまうから、大量のリクエストを同時に捌こうとするとスレッドがどんどん必要になるんだよ。
ひよこ ひよこ
同期I/Oだとどう違うの?
ペンギン先生 ペンギン先生
処理を依頼したらすぐに制御を戻してもらえるから、1つのスレッドでたくさんのI/O処理を並行して進められるんだ。
ひよこ ひよこ
具体的にはどんな仕組みで実現されてるの?
ペンギン先生 ペンギン先生
Linuxならepollやio_uringWindowsならIOCPといった、OSが用意する専用の仕組みを使うことが多いよ。
ひよこ ひよこ
Webサーバーとかで使われてるの?
ペンギン先生 ペンギン先生
そうだよ!NginxNode.jsのようなサーバーは非同期I/Oを土台にしていて、少ないスレッドで大量の同時接続をさばけているんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「非同期I/O」って出てきたら「完了を待たずに他の作業を進められるOSレベルの入出力方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Asynchronous I/O」 = 非同期の入出力
💬 処理の完了と「同期」して待たない、つまり「非同期」に進む入出力(I/O)だから、この名前がついているんだよ。
← 用語集にもどる