windows - Windows 上最好的 epoll/kqueue/select equvalient 是什么?

标签 windows io notifications epoll

Windows 最好的 I/O 事件通知工具是什么?

我最好的意思是......

  1. 对输入文件描述符的数量没有限制
  2. 适用于所有文件描述符(磁盘文件、套接字...)
  3. 提供多种通知方式(边沿触发、限位触发)

最佳答案

在 Windows 中,异步操作是通过文件操作来完成的,而不是通过描述符来完成的。有多种方法可以异步等待文件操作完成。

例如,如果您想知道网络套接字上的数据何时可用,请在套接字上发出异步读取请求,当它完成时,数据可用并被检索。

在 Win32 中,异步操作使用 OVERLAPPED 包含有关未完成的 IO 操作的状态的结构。

  1. 将文件与 IO Completion Port 相关联并分派(dispatch)异步 IO 请求。当一个操作完成时,它会在队列中放置一条完成消息,您的工作线程可以等待并在消息到达时检索该消息。您还可以将用户定义的消息放入队列中。一个完成端口可以使用多少个文​​件或排队的消息没有限制
  2. 使用事件调度每个 IO 操作。与操作关联的事件将在完成时发出信号(满足等待)。使用 WaitForMultipleObjects 一次等待所有事件。这样做的缺点是只能等待 MAXIMUM_WAIT_OBJECTS一次对象(64)。您还可以同时等待其他类型的事件(进程/线程终止、互斥、事件、信号量)
  3. 使用 thread pool .线程池可以接受无限数量的对象和文件操作来等待并执行user defined function。每完成一次。
  4. 使用<a href="http://msdn.microsoft.com/en-us/library/aa365468(VS.85).aspx" rel="noreferrer noopener nofollow">ReadFileEx</a> WriteFileEx 排队Asynchronous Procedure Calls (APC) 到调用线程和 SleepEx (或 WaitFor{Single|Multiple}ObjectsEx )与 Alertable TRUE在每个操作完成时接收通知消息。这种方法类似于IO完成端口,但只对一个线程有效。

Windows NT 内核在内部不区分套接字、磁盘文件、管道等文件操作:所有这些选项都适用于所有文件类型。

关于windows - Windows 上最好的 epoll/kqueue/select equvalient 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67082/

相关文章:

java - 如何在不知道项目路径的情况下访问项目中的现有目录 Java

android - 通知 Android 后显示 Activity

android - 某些应用程序如何阻止/替换单挑通知?

Java创建可执行命令行程序(windows)

c# - 为什么 Path.Combine 使用相对路径产生这个结果?

c++ - 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?

android - 如何从 Android 以有限的时间间隔轮询 Web 服务?

windows - PowerShell-git checkout -B没有重置或替代方法?

python - 如何在windows下打开磁盘读取低级数据?

windows - 在 Windows 上自动插入字符串