【问题标题】:Is a sendfile() like operation possible with linux-aio?linux-aio 可以进行类似 sendfile() 的操作吗?
【发布时间】:2013-07-02 07:46:27
【问题描述】:

我想通过 linux-aio 将数据从一个文件描述符发送到另一个文件描述符,而无需缓冲,也无需将数据传入和传出用户空间。 linux-aio 可以实现这样的 sendfile64() 功能吗?

我查看了一些 linux-aio 示例(在 C/C++ 中)和简单的文件复制程序。所有这些示例都在读取 -> 缓冲区 -> 写入。

问候, 菲利普

【问题讨论】:

  • 如果你想在后台使用sendfile,为什么不在单独的线程或进程中进行呢?
  • 是的,我可以使用来自多个 posix 线程的 sendfile,但我想要异步 sendfile 之类的东西。
  • aio api 的异步行为与调用线程有何不同?
  • 创建一个线程/进程,调用sendfile,从新线程/进程向父线程/进程发送信号。哒哒,异步sendfile! :)
  • 是的,我也可以使用 sendfile 非阻塞并在多个线程上以块的形式平衡操作,但内核内部的 IO 操作仍然是“普通 IO”,文件系统 IO 仍然是同步的,操作可以阻塞内核内部。 lwn.net/Kernel/Index/#Asynchronous_IO

标签: c++ c linux sendfile aio


【解决方案1】:

如果你mmap文件是可能的,那么你可以制作一个aio sendfile。它比通过 do_splice 发送文件更快,并且不应在 i_mutex 处同步。 查看 lighttp linux_aio 模块。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 2013-06-04
    • 2021-08-28
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多