代码之家  ›  专栏  ›  技术社区  ›  Benjamin

什么时候应该使用散射/聚集(矢量)IO?

  •  4
  • Benjamin  · 技术社区  · 14 年前

    scatter/gather IO (当然,其他平台也有)
    但我不知道我什么时候用IO机制。

    你能给我解释一个恰当的例子吗?

    4 回复  |  直到 14 年前
        1
  •  5
  •   Ana Betts    14 年前

    在执行大量随机(即非连续)读/写操作时,您可以使用Scatter/Gather IO,并希望在上下文开关/syscalls上进行保存—从这个意义上讲,Scatter/Gather是一种批处理形式。然而,除非您有一个非常快的磁盘(或者更可能是一个大的磁盘阵列),否则系统调用成本可以忽略不计。

    如果您正在编写一个数据库服务器,您可能会关心这一点,但是任何比一台每秒处理数千或数百万个请求的大铁机还小的东西都不会看到任何好处。

        2
  •  6
  •   MJZ    14 年前

    Paul—另外一个注意事项:另一个优点是您可以同时将多个请求传递给磁盘驱动程序。然后,驱动程序可以对请求进行排序,并以最佳顺序发出请求。虽然syscall时间很短,但seek时间(许多毫秒)可能是惩罚性的(即小于1000 I/O/s)。

    克里斯关于证明效率的评论是务实的。大自然从不说谎。嗯,几乎从来没有。

        3
  •  1
  •   Chris Becke    14 年前

    除非你能证明一个可证明的改进,否则额外的代码复杂性只是一个风险,而且没有神奇的配方说明,当满足某个条件时,应用程序将自动从某些编程聪明中获得显著的好处。

        4
  •  0
  •   Dan D.    14 年前

    在posix中,readv和writev从不连续内存中读取或写入,但要一次性从不连续内存中读取和写入不连续的文件范围,您需要readx和writex,这是posix的建议添加项之一

    执行readx比执行大量读取更快,因为这只是一个系统调用,而且它让磁盘调度程序拥有最多的io来重新排序我记得有人说过ext2/3/的。。fsck程序,他们想要这个,因为它知道它想要什么范围

    推荐文章