以下の内容はhttps://takuya-1st.hatenablog.jp/entry/2014/06/29/120820より取得しました。


シェル・スクリプトの同期・並列実行(マルチスレッド処理っぽいこと)

シェル・スクリプトで、マルチスレッド処理っぽく、複数プロセスを起動して、まとめて処理をして処理時間を稼ぎたい。

wait コマンド

複数プロセスを起動してバックグラウンドに回し、wait で処理終了を待つことが出来る

convet *.png out.jpg #なに手を加えない場合

バックグラウンドで大量に起動して処理を待つ

for i in *.png ; do convert $i  $i.jpg & ; done 
wait

wait をすると、複数起動したバックグラウンド・ジョブをすべて待つことが出来ます。

同時実行制御

CONCURRENT_COUNT=3
NUM_PROCESS=0
for  name in *.png ; do 
 NUM_PROCESS=NUM_PROCESS+1

 convert $name $name.jpg &

 if ( ( $NUM_PROCESS >= $CONCURRENT_COUNT ) ) ; then 
   wait
   NUM_PROCESS=0;
 fi


done;

wait;

単純に、3つ起動して3つ待つことが出来ます。

ただし、3つ起動して3つの終了を待ってから、次の3つを起動をする。

なので、マルチスレッドのような3つのワーカーが次々と処理をしている実装になる。 が、独立して3つがずっと働いているようにはならない。

wait は同時実行制御

もっと簡単な並列実行制御

ただし、*.jpg のような処理はxargs を使った方がらく

find . -type f -name '*.jpg'  | xargs -P 3 -I@ convert @ @.jpg; 

xargs 最強ですね。 

参考資料

並列実行はxargsコマンドを使うと楽ちん高速化ですね。 - それマグで!

端末のシェル(bash,dash,zsh,csh系)におけるwaitコマンドについて - 試験運用中なLinux備忘録

神戸外国人居留地 - Wikipedia

bashとかでは無理? | okkyの日記 | スラッシュドット・ジャパン

shell - シェルスクリプトで、マルチスレッド処理風実装 - Qiita




以上の内容はhttps://takuya-1st.hatenablog.jp/entry/2014/06/29/120820より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14