什么是Windows最好的I/O事件通知工具?
最好的我的意思是......
对输入文件描述符的数量没有限制
适用于所有文件描述符(磁盘文件,套接字......)
提供各种通知模式(边缘触发,限制触发)
Chris Smith.. 39
在Windows中,异步操作由文件操作完成,而不是由描述符完成.有几种方法可以等待文件操作异步完成.
例如,如果您想知道网络套接字上的数据何时可用,请在套接字上发出异步读取请求,并在完成后,数据可用并已检索.
在Win32中,异步操作使用该OVERLAPPED
结构来包含有关未完成的IO操作的状态.
将文件与IO完成端口关联并分派异步IO请求.当一个操作完成时,它会在你的工作线程可以等待的队列上放置一条完成消息,并在它们到达时检索.您还可以将用户定义的消息放入队列中.对完成端口可以使用多少文件或排队消息没有限制
使用事件调度每个IO操作.与操作关联的事件将在完成时发出信号(满足等待).用于WaitForMultipleObjects
一次等待所有事件.这样做的缺点是只能同时等待MAXIMUM_WAIT_OBJECTS
物体(64).您还可以同时等待其他类型的事件(进程/线程终止,互斥,事件,信号量)
使用线程池.线程池可以使用无限数量的对象和文件操作来等待并在完成每个操作时执行用户定义的函数.
使用ReadFileEx
和WriteFileEx
将异步过程调用(APC)排入调用线程,并SleepEx
(或WaitFor{Single|Multiple}ObjectsEx
)Alertable TRUE
将每个操作在完成时接收通知消息.此方法类似于IO完成端口,但仅适用于一个线程.
Windows NT内核在内部对套接字,磁盘文件,管道等文件操作没有区别:所有这些选项都适用于所有文件类型.
在Windows中,异步操作由文件操作完成,而不是由描述符完成.有几种方法可以等待文件操作异步完成.
例如,如果您想知道网络套接字上的数据何时可用,请在套接字上发出异步读取请求,并在完成后,数据可用并已检索.
在Win32中,异步操作使用该OVERLAPPED
结构来包含有关未完成的IO操作的状态.
将文件与IO完成端口关联并分派异步IO请求.当一个操作完成时,它会在你的工作线程可以等待的队列上放置一条完成消息,并在它们到达时检索.您还可以将用户定义的消息放入队列中.对完成端口可以使用多少文件或排队消息没有限制
使用事件调度每个IO操作.与操作关联的事件将在完成时发出信号(满足等待).用于WaitForMultipleObjects
一次等待所有事件.这样做的缺点是只能同时等待MAXIMUM_WAIT_OBJECTS
物体(64).您还可以同时等待其他类型的事件(进程/线程终止,互斥,事件,信号量)
使用线程池.线程池可以使用无限数量的对象和文件操作来等待并在完成每个操作时执行用户定义的函数.
使用ReadFileEx
和WriteFileEx
将异步过程调用(APC)排入调用线程,并SleepEx
(或WaitFor{Single|Multiple}ObjectsEx
)Alertable TRUE
将每个操作在完成时接收通知消息.此方法类似于IO完成端口,但仅适用于一个线程.
Windows NT内核在内部对套接字,磁盘文件,管道等文件操作没有区别:所有这些选项都适用于所有文件类型.