什么是 Windows 最好的 I/O 事件通知工具?
最好的意思是……
- 对输入文件描述符的数量没有限制
- 适用于所有文件描述符(磁盘文件,套接字,...)
- 提供多种通知方式(边沿触发、限位触发)
什么是 Windows 最好的 I/O 事件通知工具?
最好的意思是……
在 Windows 中,异步操作是由文件操作完成的,而不是由描述符完成的。有几种方法可以等待文件操作异步完成。
例如,如果您想知道网络套接字上的数据何时可用,请在套接字上发出异步读取请求,当它完成时,数据可用并被检索。
在 Win32 中,异步操作使用该OVERLAPPED
结构来包含有关未完成 IO 操作的状态。
WaitForMultipleObjects
一次等待所有事件。这样做的缺点是只能MAXIMUM_WAIT_OBJECTS
一次等待对象 (64)。您还可以同时等待其他类型的事件(进程/线程终止、互斥体、事件、信号量)ReadFileEx
和将异步过程调用WriteFileEx
(APC)排队到调用线程和(或)用于在每个操作完成时接收通知消息。该方法类似于 IO 完成端口,但仅适用于一个线程。
SleepEx
WaitFor{Single|Multiple}ObjectsEx
Alertable TRUE
Windows NT 内核在内部不区分套接字、磁盘文件、管道等文件操作:所有这些选项都适用于所有文件类型。
库夫
libuv
为 Unix 和 Windows 提供事件 I/O,并支持套接字、文件和管道。它是 Node.js 的平台层。
更多细节在: http: //nikhilm.github.io/uvbook/introduction.html
据我所知,目前还没有。我和一个朋友正在开发一个开源的 Windows epoll 实现(下面的链接),但我们遇到了问题,弄清楚如何使它与 Linux 实现一样。
目前的障碍:
随着项目的进展,我会尝试回来更新这篇文章。
select() 函数是 POSIX 并且可在包括“winsock.h”或“winsock2.h”在内的 Windows 上使用。