我有一堆我想并行执行的命令。命令几乎相同。预计它们将花费大约相同的时间,并且可以完全独立运行。它们可能看起来像:
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
可用内核的数量在哪里。
我不想重新发明轮子。这个问题已经在 Unixmake
程序中解决了(当与-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
在这方面非常好),我对此持开放态度。