並行して実行したいコマンドがたくさんあります。コマンドはほぼ同じです。それらはほぼ同じ時間かかることが予想され、完全に独立して実行できます。それらは次のようになります。
command -n 1 > log.1
command -n 2 > log.2
command -n 3 > log.3
...
command -n 4096 > log.4096
シェル スクリプトでそれらすべてを並行して起動することもできますが、システムは、CPU をビジー状態に保つために厳密に必要以上にロードしようとします (各タスクは、完了するまで 1 つのコアの 100% を使用します)。これにより、ディスクがスラッシングし、貪欲でない実行方法よりも全体が遅くなります。
最良のアプローチは、おそらくn
タスクの実行を維持することn
です。使用可能なコアの数はどこにありますか。
車輪の再発明はしたくありません。make
この問題は、Unixプログラムでは既に解決されています (-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
この点で非常に優れていました)。