【问题标题】:Writing to multiple file-descriptors写入多个文件描述符
【发布时间】:2012-01-20 08:17:17
【问题描述】:

在将一个固定字节缓冲区写入多个文件描述符时,是否有任何操作系统级 (Linux) 加速?当向一个文件描述符写入多个缓冲区时,可以使用writev(2),所以我想知道是否有任何类似的情况,或者必须通过多个系统调用来完成。

【问题讨论】:

    标签: c++ c linux gcc


    【解决方案1】:

    我知道在 Linux 上没有这样的系统调用。他们的详尽列表在syscalls(2) 手册页中给出。

    而且我不会那么麻烦。对于文件访问,真正的瓶颈是磁盘...

    【讨论】:

    • 除非写入不去磁盘; write 所做的只是将数据复制到内核中的缓冲区。 (有更改此选项的选项,但这是默认行为。)并且 OP 的问题是一个很好的问题,因为如果有这样的问题,这将意味着一个副本,并且可能只有内核中的一个缓冲区(资源较少在内核中使用)。
    • 我同意并且我知道这一点,但是当您有足够的 RAM 以容纳所有热文件时,您不必担心太多。我不认为内核能够在不同文件之间共享文件段。
    • @JamesKanze:我不确定共享缓冲区是否有效。如果您有两个文件,一个在 SSD 上,一个在很远的网络驱动器上,SSD 是否应该等待网络驱动器?根据具体情况,您可能希望至少成功写入一个文件,而不是两次半写入。
    【解决方案2】:

    我没用过,但这可能有用:lio_listio

    http://linux.die.net/man/3/lio_listio

    【讨论】:

      【解决方案3】:

      vmsplicetee 的组合应该执行请求的操作,尽管它是多次调用,但用户空间/内核空间障碍仅跨越一次。

      【讨论】:

      • 谢谢,但它只适用于管道。
      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 2010-09-20
      • 2012-03-24
      相关资源
      最近更新 更多