按顺序删除目录与在后台同时删除目录

按顺序删除目录与在后台同时删除目录

我正在编写的脚本的一部分用于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 头,那么同时执行可能需要比顺序执行更多的查找(→ 颠簸)。

相关内容