したがって、処理するCPUコアは10個、データは20個です。データを並列に処理したいのですが、一度に20個だけ処理すると問題が生じるかと心配です。だから10個のデータを2回処理したいと思います。これを行うコマンドはありますか?
情報を追加:
データはファイル形式です。ファイルあたり最大10GBまでかなり大きな容量です。私の経験では、10以上のプロセスを開始すると、PCが非常に遅くなったり、ラックが発生したりします。そのため、プロセスをコア数と同じ10個に制限しました。私のRAMの場合、ファイルを処理するソフトウェアがすべてを一度にロードしないため、RAMの使用量が非常に低いと思います。そのため、データ10個ごとに並列化すればよいのです。これで、並列に実行される10個のシェルスクリプトを作成しました。各シェルスクリプトには順次コマンドが含まれています。
答え1
GNU並列処理を使用する:
parallel my_process {} ::: files*
これはmy_process file
CPU スレッドごとに 1 つずつ実行されます。
次のタスクを開始する前に、使用可能なRAMが10Gであることを確認するようにGNU Parallelに指示できます。
parallel --memfree 10G my_process {} ::: files*
利用可能なメモリが5G未満に低下すると、GNU Parallelは最新のタスクを終了し、10Gのメモリが再利用可能になると再起動します。
答え2
GNUパラレルこれは可能です。 Debian で実行し、apt-get install parallel
マニュアルを読んでください。
Gnu並列処理は同様に機能しますxargs
が、より多くの並列プロセスを開始するかどうかを決定するのにより効果的です。
(make
それも可能です。)