コマンドの並列実行
10月 18 2008 Tags: , Linux, Perl No Commented
「Perlのsystem関数」にて、system関数を並べて実行すると、1つ目のsystem関数が実行した直後に2つ目のsystem関数が実行される。つまり、1つ目のsystem関数で指定したコマンドと2つ目のsystem関数で指定したコマンドが並列に実行されると書いたのだが、どうも勘違いだったようだ。
研究室の人たちにそんな筈はないと指摘され、
system("sleep 5");
system("sleep 5");
を実行して確認したところ、10秒かかった。つまり、1つ目のsystem関数が処理し終わった後に、2つ目のsystem関数が実行されたわけだ。よって、system関数を並べると、並列処理ではなく直列処理ということになる。書き換えれば、
system("sleep 5 ; sleep 5");
を実行しているのと同義。さて、となると問題なのが、並列処理するにはどうすればよいか。色々試してみたところ、
system("sleep 5 & sleep 5");
で試したら、5秒だった。とはいえ、コンピュータが処理を行う都合上、1つ目のコマンドを実行し始めた直後に2つ目のコマンドを実行し始めるので、微妙なタイムラグが発生するみたい。つまり、本当に同時に2つ以上のコマンドを実行するというのは不可能なようだ。
関連記事
- None Found







