【发布时间】:2011-10-04 13:58:53
【问题描述】:
如果我有将文件的每个单词读入ArrayList 或HashSet 的代码,那么将代码拆分为多个工作人员threads 并将每个文件的一个块分配给会更快吗工作(假设有多个核心)?我的直觉说不,因为在这种情况下,I/O 通常是瓶颈,而不是 CPU。
【问题讨论】:
标签: multithreading concurrency io
如果我有将文件的每个单词读入ArrayList 或HashSet 的代码,那么将代码拆分为多个工作人员threads 并将每个文件的一个块分配给会更快吗工作(假设有多个核心)?我的直觉说不,因为在这种情况下,I/O 通常是瓶颈,而不是 CPU。
【问题讨论】:
标签: multithreading concurrency io
普通驱动器的 IO 通道通常比物理介质本身提供的要快得多,因此 IO 不会成为瓶颈。使用磁性介质(也称为标准硬盘驱动器),当磁头寻找您正在读取的各个位置时,您会让磁盘像疯了一样颠簸。性能会很糟糕,相当于一辆购物车在空荡荡的 6 车道高速公路上滚下。
固态驱动器不会受到寻道惩罚的影响,但它们的普及程度(或负担得起)还不够广泛(或负担得起),还不足以发挥重要作用。
【讨论】:
这取决于。您认为 IO 将成为瓶颈的想法可能是正确的,因为许多磁盘以串行方式工作。但是,如果该磁盘是特殊的,例如真正支持并发访问的 SSD 或 RAID 怎么办?此外,如果需要对数据进行大量 CPU 绑定的后处理,那么您可以在读取另一批数据的同时进行并发处理。不要这么快就注销并发选项!
【讨论】: