我正在编写的脚本的一部分用于rm -rf
完全删除两个目录。
这些目录相对较大,可能需要相当长的时间才能删除。
目前,这些目录是按顺序删除的:
rm -rf dir1
rm -rf dir2
通过以下方式在后台同时删除它们会更快吗?
rm -rf dir1 &
rm -rf dir2 &
wait
如果是这样为什么?
答案1
这取决于。
如果被删除的文件位于相同的文件系统和硬件设备中,那么它们最终将是连续的,因为操作系统将等待物理资源在硬件中执行实际操作。尽管每个实例rm
都会对操作进行排队,以便一个在另一个完成时可用,但不要指望由此带来很大的改进。
如果rm
发生在 2 个不同 FS/硬件设备中的文件上,它将实际上是并行和异步的,因此速度会提高两倍。
答案2
就像 alx741 所说,我认为你不会以某种方式获得任何真正的好处,除非它们位于单独的文件系统上。我用 700MB 的文件做了一些测试。这是我的测试,支持我的想法。我没有多个本地分区可以使用,所以我无法测试它。
这里它是作为一个命令顺序执行的。
time rm -f test.dat1 test.dat2
real 0m0.297s
user 0m0.000s
sys 0m0.295s
这里是同时的
time rm -f test.dat1 &
time rm -f test.dat2 &
real 0m0.145s
user 0m0.000s
sys 0m0.144s
real 0m0.150s
user 0m0.000s
sys 0m0.150s
在这里,它们再次按顺序排列为两个单独的命令。
time rm -f test.dat1
time rm -f test.dat2
real 0m0.146s
user 0m0.000s
sys 0m0.146s
real 0m0.153s
user 0m0.000s
sys 0m0.152s
答案3
从理论上讲,同时(并发/并行)执行可能是慢点。可以想象,操作系统可能会使每个目录保持集群状态。即, 的内容dir1
可能具有彼此接近的索引节点号,并使用彼此接近的数据块。对于 也可能同样如此dir2
。但 的内容dir1
可能与 的内容并不接近dir2
。 (这可能取决于操作系统版本、文件系统类型以及创建目录的历史记录。)如果是这种情况(两个目录不靠近),并且文件系统位于磁盘上(HDD )需要物理查找 I/O 头,那么同时执行可能需要比顺序执行更多的查找(→ 颠簸)。