gpt4 book ai didi

Linux 和 I/O 完成端口?

转载 作者:IT老高 更新时间:2023-10-28 12:38:27 25 4
gpt4 key购买 nike

使用 winsock,您可以配置套接字或单独的 I/O 操作以“重叠”。这意味着执行 I/O 的调用会立即返回,而实际操作由单独的工作线程异步完成。

Winsock 还提供“完成端口”。据我了解,完成端口充当句柄(套接字)的多路复用器。如果句柄不在 I/O 操作的中间,即如果它的所有 I/O 操作都完成,则它可以被多路分解。

那么,关于我的问题... linux 是否支持完成端口,甚至支持套接字的异步 I/O?

最佳答案

如果您正在寻找与 IOCP 完全相同的东西,您将找不到它,因为它不存在。

Windows 使用完成时通知模型(因此是 I/O Completion 端口)。您异步启动某些操作,并在该操作完成时收到通知。

Linux 应用程序(和大多数其他类 Unix 应用程序)通常使用准备就绪模型的通知。您会收到一个通知,表明可以在不阻塞的情况下读取或写入套接字。然后,你做 I/O 操作,不会阻塞。

使用此模型,您不需要异步 I/O。数据会立即复制到套接字缓冲区中/从中复制出来。

这方面的编程模型有点棘手,这就是为什么有像 libevent 这样的抽象库的原因。它提供了一个更简单的编程模型,并抽象出支持的操作系统之间的实现差异。

Windows 中也有一个关于就绪模型的通知(select 或 WSAWaitForMultipleEvents),您可能以前看过。它无法扩展到大量套接字,因此不适合高性能网络应用程序。

不要让您失望 - Windows 和 Linux 是完全不同的操作系统。在一个系统上不能很好地扩展的东西可能在另一个系统上工作得很好。这种方法实际上在 Linux 上运行良好,性能与 Windows 上的 IOCP 相当。

关于Linux 和 I/O 完成端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794535/

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