11

での議論に続いて、単一のイベントループでAIOとepollをどのように一緒に使用しますか?

実際、Linuxには2つの「aio」APIがあります。posIX aio(aio_ *ファミリーの関数)があります。これは、io_ *ファミリーであるRedHat(?)によって開発されたglibcとlibaioに含まれています。

1つ目は、aio_sigeventaiocbメンバーを介した通知要求の登録を許可します。これは、ppoll()/ pselect()イベントループと簡単に統合できます。POSIX aioをepoll()と統合する場合は、信号をダミーfd(パイプなど)のイベントに変換し、epollでリッスンする必要があります。その間、従来の方法またはppoll/で信号をキャッチします。選択する。最初の選択肢(通常のシグハンドラー)の安全性は、アプリケーションによって異なります。そして多分epollにありますが、私はその内部を完全には認識していません。私がepollベースのアプリを持っていて、POSIX aioサポートを追加したい場合、私は困惑していると安全に想定できますか?これが私の質問でした。

2番目のAIO実装であるlibaioは、実際にeventfd()で使用できます(ゼロであると予想されるaio_resfdメンバーまたはAIO結果を配信するeventfdを持つstruct iocb)。しかし、それは本によるものではありません。POSIX指定、つまり。

私は自分がすべてが明確な*BSDユーザーになることを夢見ています。AIOイベントに対するPOSIXAIOおよびkqueue()のサポートがあります。クリスタルクリア。他の多くのものと同じように。

4

1 に答える 1

6

epollでPOSIXaioを使用できることに注意signalfd(2)してください。ファイル記述子が作成され、epollベースのループで信号の通知を受け取るために使用できます。

また、2番目のaio APIは、最終的にはglibcがPOSIX aioの実装のベースとなるものになるはずですが、まだ完全には存在していません...(誰かがそれに取り組んでいるかどうかもわかりません)

于 2010-10-22T15:37:25.173 に答える