Linux重定向如何管理快速输入和慢速输出?

Linux重定向如何管理快速输入和慢速输出?

当我这样做时,$ cat ssd/file1 > hdd/file1从 SSD 读取比写入 HDD 更快,cat 正在读取的数据会发生什么?输入和输出之间是否有任何通信告诉猫放慢速度?

答案1

考虑一下cat(它自己)的作用:它从输入读取到内存中的缓冲区(其大小由 确定cat),然后写入其标准输出。这它执行阻塞:直到到达输入末尾,读取将停止并等待数据(如果需要),同样,写入将停止并等待数据写入(如果需要)。这提供了输出和输入之间的某种通信;如果输入提供数据的速度快于输出吸收数据的速度,则写入将被阻塞,从而cat停止读取,直到可以再次写入。

操作系统缓存使情况变得有点复杂,但它们不会显着改变行为。特别是对于写入,操作系统通常会将写入的数据存储在缓存中,并稍后刷新它,而不是等待目标存储数据。从的角度来看,这允许在必须停止cat之前写入更多数据(只要另一侧有输入数据) 。cat但基本原理并没有改变,当写入速度慢于读取速度时,操作系统最终会决定阻止写入(例如因为缓存中有太多数据等待写入,或者因为等待时间太长)。

相关内容