1

非同期 I/O 処理が必要

Linux で aio* 呼び出しによる非同期 I/O の使用を計画する

状況:

AF_INET および SOCK_STREAM フラグ (TCP) を使用してソケットを開きました 送信バッファーの最高水準点を制限しています そのソケットに非同期で書き込み、送信バッファーがオーバーフローしたときにソケットを切断したい

だから、私は質問があります:

  1. TCP ソケットで aio_write の非同期呼び出しを行ったとき、I/O 完了が到着するのはいつですか?ソケット バッファーに書き出されたバッファーまたは配信が確認されるのはいつですか? どうすればこの動作を管理できますか?

  2. lio_listio テクニックでこれを処理する最善の方法

よろしく、 アンドリュー

4

1 に答える 1

3

少なくとも今のところ、Linux での AIO は実際には避けたいと考えていますaio(7)

現在の Linux POSIX AIO 実装は、glibc によってユーザー空間で提供されます。これには多くの制限があります。最も顕著なのは、I/O 操作を実行するために複数のスレッドを維持するのはコストがかかり、拡張性が低いことです。非同期 I/O のカーネル ステート マシン ベースの実装に関する作業はしばらくの間進行中ですが (、、、、、を参照) 、io_submit(2)この実装はio_setup(2)、POSIX AIO 実装を完全に再実装できる点まではまだ成熟していません。カーネル システム コールを使用します。io_cancel(2)io_destroy(2)io_getevents(2)

select(2)代わりに、 / poll(2)/でノンブロッキング IO を調べてくださいepoll(7)

于 2012-03-17T16:23:22.283 に答える