将多个作业放在后台是使用一台计算机的多个内核的好方法。parallel
但是,允许您将作业分散到网络的多个服务器上。来自man parallel
:
GNU parallel是一种Shell工具,用于使用一台或多台计算机并行执行作业 。典型的输入是文件列表,主机列表,用户列表,URL列表或表列表。
即使在单台计算机上运行时,parallel
您也可以更好地控制作业的并行化方式。从man
页面获取以下示例:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
好,你可以用
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
但是,这样做既麻烦又麻烦,更重要的是,它将启动与.wav
文件一样多的作业。如果在数千个文件上运行它,则很可能会使普通笔记本电脑屈服。parallel
另一方面,将为每个CPU内核启动一个作业,并使所有内容保持整洁。
基本上,parallel
您可以调整作业的运行方式以及应使用的可用资源量。如果您真的想了解此工具的功能,请仔细阅读其手册,或者至少阅读它提供的示例。
简单的背景技术确实比并行技术更复杂。至于有什么parallel
不同xargs
,GNU人群在这里给出了很好的细分。一些比较明显的要点是:
- xargs对特殊字符(例如空格,'和“)的处理不好。
- xargs可以并行运行给定数量的作业,但不支持并行运行cpu-cores数量的作业。
- xargs不支持对输出进行分组,因此输出可以一起运行,例如,一行的前半部分来自一个进程,而该行的后半部分来自另一个进程。
- xargs不支持保持输出顺序,因此,如果使用xargs并行运行作业,则无法将第二个作业的输出推迟到第一个作业完成之前。
- xargs不支持在远程计算机上运行作业。
- xargs不支持上下文替换,因此您必须创建参数。
parallel
语法,但它却成为了另一种崭新的键盘表情符号。但是我想核心/职位之间的自动平衡是值得的...?