它让我困惑了很长时间。 我的程序有两个进程,都从磁盘读取数据,磁盘最大读取速度10M/s
1.如果两个进程都读取10M数据,两个进程花费的时间是否相同,一个进程读取两次?
2.如果两个进程都读取5M数据,两个进程读取数据花费1s,一个进程读取两次花费1s,我知道多进程可以从IO中节省时间,但是在IO上花费相同的时间,多进程如何节省时间?
无法通过添加更多线程来提高磁盘读取速度。读取 2 个线程时,每个线程最多只能获得 1/2 的速度(实际上甚至更低(,使用 3 个线程 - 1/3 的速度,依此类推。
对于磁盘 I/O,顺序访问速度和随机访问速度之间的差异非常重要。例如,顺序读取速度可以是 10 MB/s,而随机读取速度仅为 10 KB/s。即使使用最新的SSD驱动器也是如此(尽管比例可能不太明显(。
因此,您更愿意一次只从一个线程按顺序从磁盘读取。并行读取 2 个线程中的文件不仅会将每次读取的速度降低一半,而且由于非顺序(交错(磁盘访问而进一步降低。
但请注意,10 MB 实际上并不多;现代操作系统会将整个文件预取到缓存中,任何后续读取都将显示为即时。