我有一个大约8GB的文本文件,需要进行一些简单的筛选,然后对所有行进行排序。我使用一台28核心、SSD和128GB RAM的计算机进行操作。我尝试了以下方法:
方法1
方法二
令人惊讶的是,方法1需要11.5分钟,而方法2仅需要(0.75 + 1 < 2)分钟。为什么管道排序这么慢?难道不是并行的吗?
编辑
awk和myBigFile并不重要,通过简单地使用seq 1 10000000 | sort --parallel 56(感谢@Sergei Kurenkov),可以重复进行此实验,并且我也观察到在我的机器上使用未经管道处理的版本可以提高六倍的速度。
方法1
awk '...' myBigFile | sort --parallel = 56 > myBigFile.sorted
方法二
awk '...' myBigFile > myBigFile.tmp
sort --parallel 56 myBigFile.tmp > myBigFile.sorted
令人惊讶的是,方法1需要11.5分钟,而方法2仅需要(0.75 + 1 < 2)分钟。为什么管道排序这么慢?难道不是并行的吗?
编辑
awk和myBigFile并不重要,通过简单地使用seq 1 10000000 | sort --parallel 56(感谢@Sergei Kurenkov),可以重复进行此实验,并且我也观察到在我的机器上使用未经管道处理的版本可以提高六倍的速度。