【发布时间】:2011-05-05 14:27:51
【问题描述】:
我有一堆想要并行执行的命令。命令几乎相同。预计它们将花费大约相同的时间,并且可以完全独立运行。它们可能看起来像:
command -n 1 > log.1
command -n 2 > log.2
command -n 3 > log.3
...
command -n 4096 > log.4096
我可以在 shell 脚本中并行启动所有这些,但系统会尝试加载超出严格要求的负载以保持 CPU 繁忙(每个任务在完成之前占用一个内核的 100%)。与不那么贪婪的执行方法相比,这将导致磁盘抖动并使整个事情变慢。
最好的方法可能是保持大约n 任务执行,其中n 是可用内核的数量。
我不想重新发明轮子。这个问题已经在 Unix make 程序中得到解决(当与 -j n 选项一起使用时)。我想知道是否可以为上述内容编写通用 Makefile 规则,以避免出现如下所示的线性大小的 Makefile:
all: log.1 log.2 ...
log.1:
command -n 1 > log.1
log.2:
command -n 2 > log.2
...
如果最好的解决方案不是使用make,而是使用另一个程序/实用程序,只要依赖关系合理,我对此持开放态度(make 在这方面非常好)。
【问题讨论】:
标签: unix shell makefile buildfarm