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