libevent
バッファリングされたファイル I/O を処理しますか? 私はそれがソケットをかなりうまく処理することを知っていますが、それは通常のファイルにも関係しますか、それとも「唯一の」epoll/...
ラッパーですか?
3 に答える
libevent (または、 egepoll
やなどの基になる準備完了通知メカニズムkqueue
) を通常のファイル記述子で使用することは、通常は意味がありません。例外は、NFS 上のファイル、またはeventfd
.
ローカル ディスク上のファイル記述子は常に準備が整っており、常に十分なバッファー スペースがあり、操作は常に「即時」に完了します。書き込み操作はデータをバッファ キャッシュにコピーするだけで、ディスクへの実際の書き込みは発生するたびに行われます。(このリンクは Linux 固有のものであることに注意してください。ただし、いくつかの小さな実装の詳細を除けば、他のシステムでも同じように機能します)
libevent は epoll ラッパーではありません。各プラットフォームで使用できる最高のパフォーマンスの方法が選択されます。
ソケットはファイル記述子でもあるため、ファイル io に libevent を使用できるはずです。
ただし、libevent の epoll の使用を無効にする必要があります。私の記憶が正しければ、Epoll は unix ファイルをサポートしていません。
struct event_config *cfg = event_config_new();
event_config_avoid_method(cfg, "epoll");
libevent は、stdio.h
ファイル記述子を直接使用して、バッファリングされたファイル I/O (で得られるもの) よりも低いレベルにあります。epoll/select/kevent/etc ラッパーの「単なる」ものであると考えるのは正しいことです。その目的は、ファイル I/O の最低レベルである記述子でイベントをリッスンすることです。stdio.h
ただし、最終的にはファイル記述子も使用するため、ファイル I/O ライブラリ機能と組み合わせて使用できます。を使用して、待機するfileno(3)
からファイル記述子を取得できますFILE *
。