我们公司的一台服务器有32个CPU,我们有1000多个非常大的文件需要处理。我不确定同时读取32个文件是否是一个好主意,因此所有内核也可以同时执行独立计算。谁能简单解释一下硬盘的工作原理?如果我同时读取32个文件,会降低阅读速度吗?谢谢!
答案 0 :(得分:2)
hard disk传统上是一种机械数据存储设备。我假设服务器使用的是机械式服务器,而不是没有移动部件的较新的SSD类型的硬盘。我还假设有这么多的数据和处理能力,正在使用多个硬盘(RAID或NAS。)这些细节会显着影响性能,并可能使下面的大部分内容变得不准确。
作为机械设备的硬盘像老式唱机或CD一样有旋转盘。它涂有一种可记录和回放微小磁脉冲的材料。可定位的“读写”磁头正好在每个磁盘的表面上方飞行,通常在每个磁盘的两侧,准备好在每个磁盘的表面上移动以定位,读取和写入这些磁脉冲。旋转和运动都需要时间。磁盘被赋予的“工作”越多,完成所需的时间就越长,仅仅因为它必须在磁盘表面上物理定位更多的微观区域。
也就是说,想象一下,有29名员工被分配阅读所有29卷“百科全书百科全书”。 (当然是3个主管。)每个卷存储在一个硬盘上,因此有29个硬盘。有两种方法可以读取整个内容:
选项#1似乎“过时了”,但是这个方法的一个重要之处在于其他28个磁盘根本没有被使用。只有一个。硬盘远在顺序读取数据方面比随机读取更好。这是因为顺序读取可以避免读写磁头来回寻找延迟。
选项#2会起作用,听起来很合理,但由于两个原因它并不理想:a)几乎没有顺序读取,b)所有磁盘都在使用中。这会占用更多功率,并对服务器提出更大的需求,以便同时运行所有这些磁盘。
所以是的,如果你试图同时处理32个巨大的文件,那么这将给磁盘带来巨大的负担,并且它们可能会慢慢爬行。更复杂,但可能是更好的解决方案,让32个核心一次“轮流”使用其中一个巨大的文件,直到它们全部被处理完毕。 (通过“轮流”,我的意思是将其分解为更小,更易于管理的块。)同样,目标是尽可能顺序地读取磁盘,并避免随机搜索 - 来回。
实现此目的的软件必须是multi-threaded,这意味着用户只启动一个程序,但它为其他CPU核心创建了31个新的“工作线程”。主程序按顺序开始读取数据,并将此传入数据拆分为块以供其他线程(核心)处理。那些然后“轮流”处理整个数据文件的小块,直到它被完全处理。