gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:04:18 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com