gpt4 book ai didi

Linux 异步 IO - aio.h 和 libaio.h 之间的区别

转载 作者:IT王子 更新时间:2023-10-29 00:20:08 40 4
gpt4 key购买 nike

我已经开始研究一种我不知道的新范例,称为 Linux 中的异步 IO。

我的目标是使用异步 IO 目标套接字来编写高性能高效服务器。原因是我的应用程序受 IO 限制。

在搜索更多信息时,我发现了以下 2 个介绍。

  1. Posix AIO

  2. Linux AIO interface

在异步框架中,我想避免的情况是为我需要异步处理的每个通知创建一个新线程,因为它会杀死我的应用程序。

我的问题如下:

  1. 这两个框架的幕后解决了这个问题吗?

  2. 如果是,您建议考虑套接字是什么?

问候

AFG

最佳答案

这些都不是真正用于套接字的。

POSIX AIO 接口(interface)创建使用普通阻塞 IO 的线程。它们与缓冲区缓存一起工作,原则上应该甚至与套接字一起工作(尽管我承认我没有尝试过)。

Linux 内核AIO 接口(interface)不创建线程来处理请求。它专门在“无缓冲”模式下工作。当心一些不明显的行为,例如在某些情况下提交请求时阻塞,您既无法预见也无法阻止(除了您的程序表现“怪异”之外,您也不知道)。

你想要的是非阻塞套接字(非阻塞套接字“有点异步”)和 epoll 以将就绪通知的开销降至最低,并且 - 如果你能弄清楚几乎不存在的文档 -- splicevmsplice 以减少 IO 开销。使用 splice/vmsplice,您可以直接从磁盘 DMA 到内核缓冲区,然后从那里推送到网络堆栈。或者,您可以直接将页面从应用程序的地址空间移动到内核,然后推送到网络。
缺点是文档很少(至少可以说),尤其是对于 TCP,一些问题仍未解决,例如什么时候回收内存是安全的。

关于Linux 异步 IO - aio.h 和 libaio.h 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386043/

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