【问题标题】:Would multiple threads speed up code reading from disk into memory?多线程会加快代码从磁盘读取到内存的速度吗?
【发布时间】:2011-10-04 13:58:53
【问题描述】:

如果我有将文件的每个单词读入ArrayListHashSet 的代码,那么将代码拆分为多个工作人员threads 并将每个文件的一个块分配给会更快吗工作(假设有多个核心)?我的直觉说不,因为在这种情况下,I/O 通常是瓶颈,而不是 CPU。

【问题讨论】:

    标签: multithreading concurrency io


    【解决方案1】:

    普通驱动器的 IO 通道通常比物理介质本身提供的要快得多,因此 IO 不会成为瓶颈。使用磁性介质(也称为标准硬盘驱动器),当磁头寻找您正在读取的各个位置时,您会让磁盘像疯了一样颠簸。性能会很糟糕,相当于一辆购物车在空荡荡的 6 车道高速公路上滚下。

    固态驱动器不会受到寻道惩罚的影响,但它们的普及程度(或负担得起)还不够广泛(或负担得起),还不足以发挥重要作用。

    【讨论】:

    • “普通驱动器的 IO 通道通常比物理介质本身提供的速度快得多,因此 IO 不会成为瓶颈。” - 为什么?
    • 3Gbps 和 6Gbps SATA 接口比标准驱动器物理吸走介质的速度要快得多。最新的 SSD,尤其是 Sandforce 控制器,实际上可以接近(或超过)3Gbps。
    • 如果是SAN/NAS呢?
    • 视情况而定。 SAN 可能很大,但不一定很快。 NAS 也一样。 NAS 通常是通过以太网完成的,因此除了硬件限制之外,您还有网络开销。
    【解决方案2】:

    这取决于。您认为 IO 将成为瓶颈的想法可能是正确的,因为许多磁盘以串行方式工作。但是,如果该磁盘是特殊的,例如真正支持并发访问的 SSD 或 RAID 怎么办?此外,如果需要对数据进行大量 CPU 绑定的后处理,那么您可以在读取另一批数据的同时进行并发处理。不要这么快就注销并发选项!

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 2014-08-28
      • 2016-09-06
      • 2016-12-09
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 2020-09-02
      • 2016-04-26
      相关资源
      最近更新 更多