vvo*_*dcx 4 hardware hard-drive hardware-acceleration
我们公司的一台服务器有32个CPU,我们有1000+个非常大的文件需要处理。我不确定同时读取 32 个文件是否是一个好主意,这样所有内核也可以同时执行独立计算。谁能简单解释一下硬盘的工作原理?如果同时读取32个文件,读取速度会不会变慢?谢谢!
硬盘传统上是一种机械数据存储设备。我假设服务器使用机械硬盘,而不是较新的 SSD 类型的硬盘,因为后者没有移动部件。我还假设拥有如此多的数据和处理能力,同时使用多个硬盘(RAID 或 NAS)。这些细节可能会显着影响性能,并且可能导致以下大部分内容不准确。
硬盘是一种机械设备,内部有一个旋转的光盘(盘片),就像老式唱机或 CD 一样。它涂有磁性材料,可以记录和播放微小的磁脉冲,就像录音带一样。可定位的“读写”磁头飞行在每个磁盘表面的正上方,通常在磁盘的两侧串联,准备在表面上移动以定位、读取和写入这些磁脉冲。旋转和移动都需要时间。磁盘要做的“工作”越多,完成所需的时间就越长,因为它必须在磁盘表面上物理定位更多的微观区域。
也就是说,想象一下您的老板希望所有员工阅读全部 29 卷的大英百科全书并给出摘要。每卷存储在一个硬盘上,因此共有 29 个硬盘。有两种方式可以阅读整个内容:
选项 #1 似乎“过时”,但此方法的一个重要事项是其他 28 个磁盘根本没有被使用。只有一个是。硬盘顺序读取数据的能力比随机读取数据的能力要好得多。这是因为顺序读取避免了读写头来回寻道造成的延迟。
选项 #2 可行,而且听起来很合理,但它并不理想,原因有两个:a) 几乎没有顺序读取,b) 所有磁盘都在使用中。这会消耗更多的电量,并对服务器同时运行所有这些磁盘提出了更高的要求。这样最终会花费更长的时间。
所以,是的,如果您尝试同时处理 32 个大文件,那么这会给磁盘带来巨大的负载,而且它们的速度可能会慢得像爬行一样。让 32 个核心一次“轮流”处理其中一个大文件,直到全部处理完毕为止,虽然更复杂,但可能是更好的解决方案。(我所说的“轮流”是指将其分成更小、更易于管理的块。)同样,目标是使磁盘尽可能按顺序读取,并避免随机来回查找。
实现这一目标的软件必须是多线程的,这意味着用户只启动一个程序,但它会为其他 CPU 内核创建 31 个新的“工作线程”。主程序开始按顺序读取数据,并将传入的数据分割成块以供其他线程(核心)处理。然后,所有这些都“轮流”处理整个数据文件的小部分,直到完全处理完毕。