1

我需要开发一个在 UDP 套接字中使用 IOCP 的应用程序,但是在 Microsoft 文档中作为其他示例找到的材料或在实现形式上模糊或集中。我希望有使用 IOCP 经验的人确认正确的用法是:

  • 调用 CreateIoCompletionPort 函数来创建一个 IOCP。
  • 我将我的套接字与具有相同功能的 IOCP 相关联。
  • 执行 IO 操作(在我的情况下为 WSARecvFrom 或 WSASendTo)
  • 调用 GetQueuedCompletionStatus 函数,该函数将阻塞我的进程,直到我的 IO 操作完成(例如,这可以在线程池中完成)
  • 实现缓冲区或运算结果的读取。

我没有描述套接字的实现,因为它不是重点,但这是使用 IOCP 的正确方法吗?

第二个问题是关于应用程序设计的,在发送信息的情况下。我读到一些内容,说使用 IOCP 的应用程序不会使用直接调用输出操作(例如直接调用 WSASendTo 函数),而是使用 PostQueuedCompletionStatus 函数在线程中生成事件来运行此操作。根据我的研究,我认为在性能方面没有任何优势。

假设这两种形式都应用于线程池,那么使用 PostQueuedCompletionStatus 执行输出操作有优势吗?

4

0 回答 0