非同期ディスク ファイル I/O に関するこのチュートリアルを読んでいますが、明確にはなっておらず、実際にはもっと混乱しています。
2 つの異なる非同期があります。チュートリアルによる I/O モデル:
でファイルを開き、 // を使用する非同期ブロッキングI
O_ASYNC
/epoll
O 。poll
select
glibc の AIO を使用した非同期 IO
glibc はスレッド プールを使用して AIO を実装しているため、この質問で「AIO」を使用して言及しているのは、むしろカーネル AIOです。io_submit
少なくとも概念的な観点からは、大きな違いはないio_submit
ようです。複数の I/O リクエストを発行できますが、 read
withO_ASYNC
を使用すると、ファイル位置で 1 つのリクエストを発行できます。
このガイドepoll
では、Linux AIO の代替としての使用についても言及しています。
epoll。Linux は、非同期 I/O のメカニズムとしての使用を限定的にサポートしています。
epoll
バッファ モードで (つまり、 なしでO_DIRECT
) 開かれたファイルへの読み取りの場合、ファイルが として開かれている場合O_NONBLOCK
、関連する部分がメモリに格納されるまで、読み取りは EAGAIN を返します。バッファリングされたファイルへの書き込みは、別のライトバックスレッドで書き出されるため、通常は即座に行われます。ただし、これらのメカニズムは、直接 I/O が提供する I/O の制御レベルを提供しません。
epoll
AIO の代替として使用する際の問題は何ですか? 言い換えれば、[新しいインターフェイス]io_submit
が解決する必要がある問題は何ですか?