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