当并行化代码时,xargs和gnu parallel有什么区别?

8

这是一个基本的问题。我很好奇xargs和gnu parallel在并行化代码时有什么区别?

而且,在什么情况下你会使用其中之一?

我问这个问题是因为我看到过在并行化问题上使用这两种工具都被社区认为是可接受的答案。


3
答案可能会引起争议,每个人的看法可能都不同(极端),但在我看来,GNU Parallel 明显更强大、灵活、可配置和有能力,但在任何给定的系统上出现的可能性较小。POSIX 倡导者可能有不同的观点。阅读此文后自行决定:https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjMvIDwo5XqAhVKLBoKHbwCALEQFjAAegQIBRAB&url=https%3A%2F%2Fzenodo.org%2Frecord%2F1146014%2Ffiles%2FGNU_Parallel_2018.pdf%3Fdownload%3D1&usg=AOvVaw35x0WxcO2IE5NhKvyL9JXP - Mark Setchell
1个回答

8
一些区别已在以下链接中介绍:https://www.gnu.org/software/parallel/parallel_alternatives.html#differences-between-xargs-and-gnu-parallel。简而言之,xargs速度更快,因为几乎没有开销(每个作业约0.3毫秒,而GNU Parallel大约为3毫秒)。GNU Parallel更安全,因为它采取了各种预防措施,使您不必担心(例如,两个并行运行的作业输出不会混杂)。GNU Parallel具有许多xargs没有的功能。GNU Parallel需要Perl,而xargs则不需要。xargs无处不在,GNU Parallel需要使用--embed以确保它无处不在。
因此,总的来说:如果主要关注避免开销(例如,如果每个工作需要几毫秒运行)或避免安装Perl(例如,如果您的系统是嵌入式的,因此资源紧张),那么请使用xargs(并根据输入/输出采取相关预防措施)。
完全透明披露:我对GNU Parallel有一定利益。

1
请注意,Perl 已经自动包含在所有版本的 macOS 中,因此在 Mac 上使用 Perl 不需要额外的要求。 - Mark Setchell
1
@KleberNoel 这是 POSIX 标准的一部分。 - Ole Tange
我想补充一下,xargs 的 man 页面可以在几分钟内阅读完毕,而 parallel 则需要数小时。 - Pound Hash
@OleTange 这个设计太过花哨了。也许是因为我色盲,但我看不清那个。 - Pound Hash
2
@PoundHash 这里有一个灰色版本 https://www.gnu.org/software/parallel/parallel_cheat_bw.pdf - Ole Tange
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接