ループの繰り返し回数が10^6のように非常に大きくなるforループを並列化したいと思います。したがって、プロセスの代わりにスレッドを作成できる場合は、より良いようです。どうすればいいですか?コードは以下のように表示されます。
N=$1
for (( i=0; i < $N; i++ )); do
./random >> output /* in each iteration one random number is appended to
a file "output" */
done
ベストアンサー1
- シェルではスレッドを作成できません。
- 複数のプロセスで同じファイルに書きたくありません。
random
プログラムが数字のみを生成する場合- ループがバインドされるのに十分速くなければなりません。
- 可能であれば、引数を受け入れ、それだけの数字を印刷するように編集する必要があります。
- 実際の実行によってボトルネックが発生した場合は、数値の生成方法を再検討する必要があります。コードを公開することもできます。コードレビュー。
もしあなたが本当に本物それでもこれを行うには、チャンク単位で実行します。
for i in {0..9}; do
for ((j = 1; j < $N/10; j++)); do
./random
done > tmp$i &
pid[$i]=$?
done
for i in {0..9}; do
wait ${pid[$i]}
done
cat tmp{0..9} >> outfile