Windows の最高の I/O イベント通知機能は何ですか?
せいぜい私は何かを意味します...
- 入力ファイル記述子の数に制限はありません
- すべてのファイル記述子 (ディスク ファイル、ソケットなど) で動作します。
- さまざまな通知モードを提供 (エッジ トリガー、リミット トリガー)
Windows の最高の I/O イベント通知機能は何ですか?
せいぜい私は何かを意味します...
Windowsでは、非同期操作は記述子ではなくファイル操作によって実行されます。ファイル操作が非同期で完了するのを待つ方法はいくつかあります。
たとえば、データがネットワークソケットでいつ利用可能になるかを知りたい場合は、ソケットで非同期読み取り要求を発行し、それが完了すると、データが利用可能になり、取得されました。
Win32では、非同期操作はOVERLAPPED
構造を使用して、未処理のIO操作に関する状態を含みます。
WaitForMultipleObjects
一度にすべてのイベントを待機するために使用します。これには、オブジェクトを一度にしか待機できないという欠点がありMAXIMUM_WAIT_OBJECTS
ます(64)。他のタイプのイベント(プロセス/スレッドの終了、ミューテックス、イベント、セマフォ)を同時に待機することもできます。ReadFileEx
およびを使用して、非同期プロシージャ呼び出し(APC)を呼び出し元のスレッドWriteFileEx
にキューに入れ、 (または)を使用して、操作の完了時に各操作の通知メッセージを受信します。この方法はIO完了ポートに似ていますが、1つのスレッドに対してのみ機能します。
SleepEx
WaitFor{Single|Multiple}ObjectsEx
Alertable TRUE
Windows NTカーネルは、ソケット、ディスクファイル、パイプなどのファイル操作を内部的に区別しません。これらのオプションはすべて、すべてのファイルタイプで機能します。
libuv
libuv
Unix および Windows 用のイベント I/O を提供し、ソケット、ファイル、およびパイプをサポートしています。Node.js のプラットフォーム層です。
私の知る限り、まだありません。友人と私は、オープン ソースの Windows epoll の実装 (以下のリンク) に取り組んでいますが、Linux の実装と同じように動作させる方法を考え出すという問題に直面しています。
現在の障害:
プロジェクトの進捗状況に応じて、この投稿を更新する予定です。
select() 関数は POSIX であり、「winsock.h」または「winsock2.h」を含むウィンドウで使用できます。