我正在使用 Linux 合并排序 (sort -m) 对一大组预排序文件进行排序。我原本以为合并排序会比对未排序数据进行完整排序快得多,但事实并非如此。例如,如果我对包含 10000 行未排序数据的 1000 个文件进行完整排序:
/bin/time -o ./full_sort.time -v sort --parallel 8 -k1,1g ./data/unsorted/f* > /dev/null
我看到以下时间:
User time (seconds): 104.70
System time (seconds): 0.71
Percent of CPU this job got: 440%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:23.90
现在,如果我对数据进行预先排序,并在调用 -m 选项时运行完全相同的排序:
/bin/time -o ./merge_sort.time -v sort --parallel 8 -k1,1g -m ./data/presorted/f* > /dev/null
我看到这些时间:
User time (seconds): 59.34
System time (seconds): 2.15
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:01.60
合并排序的挂钟时间实际上是慢点比完整排序快得多!同样,我期望合并排序会快得多,因为数据集中的每个输入文件都经过了预排序,只剩下合并步骤需要完成。我肯定漏掉了什么。有人能解释一下我做错了什么吗?
谢谢,JCS