同时读取多个文件是个好主意吗?

时间:2015-02-19 19:15:29

标签: hardware hard-drive hardware-acceleration

我们公司的一台服务器有32个CPU,我们有1000多个非常大的文件需要处理。我不确定同时读取32个文件是否是一个好主意,因此所有内核也可以同时执行独立计算。谁能简单解释一下硬盘的工作原理?如果我同时读取32个文件,会降低阅读速度吗?谢谢!

1 个答案:

答案 0 :(得分:2)

hard disk传统上是一种机械数据存储设备。我假设服务器使用的是机械式服务器,而不是没有移动部件的较新的SSD类型的硬盘。我还假设有这么多的数据和处理能力,正在使用多个硬盘(RAID或NAS。)这些细节会显着影响性能,并可能使下面的大部分内容变得不准确。

作为机械设备的硬盘像老式唱机或CD一样有旋转盘。它涂有一种可记录和回放微小磁脉冲的材料。可定位的“读写”磁头正好在每个磁盘的表面上方飞行,通常在每个磁盘的两侧,准备好在每个磁盘的表面上移动以定位,读取和写入这些磁脉冲。旋转和运动都需要时间。磁盘被赋予的“工作”越多,完成所需的时间就越长,仅仅因为它必须在磁盘表面上物理定位更多的微观区域。

也就是说,想象一下,有29名员工被分配阅读所有29卷“百科全书百科全书”。 (当然是3个主管。)每个卷存储在一个硬盘上,因此有29个硬盘。有两种方法可以读取整个内容:

  1. 分拣第一卷,然后依次让每位员工一次开始阅读一页,直到所有卷完成为止。监督员在处理所有页面时收集并重新排序,一次一个卷。
  2. 同时拾取所有29卷,并尝试以基本随机(净效果)读取页面,直到所有卷完成。主管收集并重新订购29个随机章节中的所有页面... ...
  3. 选项#1似乎“过时了”,但是这个方法的一个重要之处在于其他28个磁盘根本没有被使用。只有一个。硬盘在顺序读取数据方面比随机读取更好。这是因为顺序读取可以避免读写磁头来回寻找延迟。

    选项#2会起作用,听起来很合理,但由于两个原因它并不理想:a)几乎没有顺序读取,b)所有磁盘都在使用中。这会占用更多功率,并对服务器提出更大的需求,以便同时运行所有这些磁盘。

    所以是的,如果你试图同时处理32个巨大的文件,那么这将给磁盘带来巨大的负担,并且它们可能会慢慢爬行。更复杂,但可能是更好的解决方案,让32个核心一次“轮流”使用其中一个巨大的文件,直到它们全部被处理完毕。 (通过“轮流”,我的意思是将其分解为更小,更易于管理的块。)同样,目标是尽可能顺序地读取磁盘,并避免随机搜索 - 来回。

    实现此目的的软件必须是multi-threaded,这意味着用户只启动一个程序,但它为其他CPU核心创建了31个新的“工作线程”。主程序按顺序开始读取数据,并将此传入数据拆分为块以供其他线程(核心)处理。那些然后“轮流”处理整个数据文件的小块,直到它被完全处理。