比如 4 个程序(和 CPU 数相同)读同一块硬盘上的文件(文件名连续),文件都不相同,和一个程序依次读这些文件,最后时间谁多谁少呢?同时读的总时间为各程序的执行时间之和。假设内存足够。
对硬盘底层并不了解,我想如果来回切读取的位置,那读头应该会频繁移动,反而将时间耗在随机寻址上,相比单个程序顺序读,要慢不少,是这样吗?如果是这样的话,那一台机器难免会多个程序同时运行,难免会同时读取(这就更不说写入了),那这很难协调让效率最大化了?
1
zhicheng 2016-08-15 19:56:36 +08:00 via Android
文件大,无所谓。文件小,多个快。
如果文件远小于内存,只有读请求,来回 seek 影响不大。 文件名不影响文件读取数度,但我猜你的意思是文件是顺序创建的。 |
2
singser123 2016-08-15 21:40:46 +08:00 via Android
现在的硬盘都支持 ncq 了,会对队列顺序重新排序使磁头移动距离最少
|
3
loading 2016-08-15 21:45:11 +08:00 via Android
只有一个磁头,文件碎片造成性能下降就是体现之一
|
4
em70 2016-08-15 22:08:24 +08:00
如果文件不大,可以在内存虚拟一个硬盘出来放里面,就不考虑这些问题了
|
5
shijingshijing 2016-08-15 22:34:16 +08:00
机械硬盘都要移动磁头寻道的然后读取的,底层理论上是顺序读写的, ncq 的意义就是把多个不同的请求尽量合并在一次寻道来读取。
|
6
kaneg 2016-08-15 23:34:35 +08:00
多个程序读多个文件和一个程序读多个文件对操作系统的系统调用来说都是一样的,本质上不会有差异的。
|
7
pubby 2016-08-15 23:42:51 +08:00
|
8
billlee 2016-08-16 00:17:58 +08:00
不要把精力花费在无意义的优化上
|
10
pubby 2016-08-16 08:19:26 +08:00 via Android
@9hills 是的。但是一个程序总要按文件实际的存储位置依次顺序读下去,我的疑问是,我还没读到后面, ncq 怎能能知道我后续的磁头定位信息?
|
11
murmur 2016-08-16 08:36:45 +08:00
不要把操作系统当弱智好吧。。
|
12
wizardoz 2016-08-16 09:34:42 +08:00
你这个问题相当于这样:
要读取磁盘上的多个文件,让操作系统优化读取过程相比于自己写一个程序来读,会慢吗? |