1

需要异步 I/O 处理

计划在 Linux 上通过 aio* 调用使用异步 I/O

情况:

我打开了带有 AF_INET 和 SOCK_STREAM 标志的套接字 (TCP) 发送缓冲区有限制高水位线想要异步写入该套接字,并且当发送缓冲区溢出时,想要断开套接字

所以,我有问题:

  1. 当我在 TCP 套接字上对 aio_write 进行异步调用时,当 I/O 完成将到达时 - 当缓冲区写入套接字缓冲区或确认交付时?我该如何管理这种行为?

  2. 使用 lio_listio 技术如何最好地处理这个问题

问候, 安德鲁

4

1 回答 1

3

你想避免在 Linux 上使用 AIO,至少现在是这样,来自aio(7)

当前的 Linux POSIX AIO 实现由 glibc 在用户空间中提供。这有许多限制,最明显的是维护多个线程来执行 I/O 操作是昂贵的并且扩展性很差。基于内核状态机的异步 I/O 实现的工作已经进行了一段时间(请参阅io_submit(2)io_setup(2)io_cancel(2)io_destroy(2)io_getevents(2)),但该实现尚未成熟到可以完全重新实现 POSIX AIO 实现的程度使用内核系统调用。

select(2)相反,使用/ poll(2)/查看非阻塞 IO epoll(7)

于 2012-03-17T16:23:22.283 回答