我可以并行排序吗?

mik*_*iku 14 performance sort

例如,bzippbzipbzip. 有没有这样的并行化工具sort来提高性能?

Sté*_*las 13

从 coreutils 8.6 (2010-10-15) 开始,GNUsort已经并行排序以利用可用的多个处理器。因此,它不能在这方面进一步改进,例如pigzpbzip2改进gzipbzip2

如果您sort不是并行的,您可以尝试sort从最新版本的GNU coreutils安装GNU

使用 GNU sort,您可以使用该--parallel选项限制线程数。

  • sort --stable 提供了 15% 的性能提升,至少在我的测试工作负载中是这样。 (2认同)

小智 8

总是对我最有帮助的一件事是给它尽可能多的内存,以减少交换,例如:

sort -S 20G
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这也是我最近使用的一个技巧——如果需要,让 sort 使用一半的 RAM:`sort -S 50%` (6认同)

War*_*ung 6

如果您的文件足够大,排序将导致磁盘交换,要么是因为分配的虚拟内存增长得太大,要么是因为sort程序本身正在将块交换到磁盘并返回。较旧的sort实现更有可能具有这种“通过磁盘缓冲区排序”的行为,因为它是过去对大文件进行排序的唯一方法。

sort有一个-m选项可以帮助您。将文件分成块可能会更快——比如用split -l——对它们进行独立排序,然后将它们合并在一起。

再说一次,这可能正是“通过磁盘缓冲区排序”所做的。确定它是否有帮助的唯一方法是在您的特定测试负载上对其进行基准测试。关键参数将是您提供给 的行数split -l

  • 这是 [merge sort](http://en.m.wikipedia.org/wiki/Merge_sort) 算法的变体,它是可用的最快的排序方法之一。 (2认同)