- 締切済み
並列処理、fork、threadについて
別カテゴリにて質問を載せてしまったので、再度質問させていただきます。 今現在perlの勉強をしており、あるプログラム(Xとします)を作ろうと考えています。 Xの簡単な内容は、以下の通りです。 1.ファイル(Aとします)を別のテキストファイル(Bとします)を元に作成する→AをBを元に更に編集(作成したものをA'とします)→A''を作成→・・・・・・ 2.(Aが作成されるのを待って)Aをあるプログラムにて実行→(A'が作成されるのを待って)A'をあるプログラムにて実行→・・・・・・ 1.2.を並行して行う。(何並列にするかは、Xを実行時に決める) 例えば3並列にする場合は、Aを作成、A'を作成、Aを実行→A''を作成、A'''を作成、A'を実行→A''''を作成、A'''''を作成、A''を実行→・・・・・・という具合にしたいと考えています。 以上がXの内容なのですが、この並行して行うというのがなかなかできません。調べてみると、fork、threadなどの方法があるようですが、どうしても上手くいきません。助言をお願いします。可能であれば、簡単なサンプルコードなどを教えていただけたら幸いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
どことどこが並列になるか、ちょっとわかりずらいのです。(というより、順列になっていて並列処理できないようにも見えるのですが) また、その「あるプログラム」とやらの素性もわからないし、「上手くいきません」の内容もわからないので、アドバイスのしようもありません。 Perlで悩んだら、マニュアル(perldoc)を読みましょう。日本語訳もされています。下手な解説書よりよっぽど詳しく書いてあります。 例えば、スレッドについてのチュートリアルがあります。 http://perldoc.jp/docs/perl/5.10.0/perlthrtut.pod 雑に言えば、「Perlの関数を複数同時に実行する仕組み」です。 forkは、雑に言えば「自分自身の分身を作る」ものです。 これはシステムコールを使ったもの(あるいはシミュレートしたもの)なので、どんな風に扱うかは、Unix系OSの解説を探すのがよいでしょう。 その「あるプログラム」がPerlのスクリプトだったら、関数の形にして、スレッドを使って並列処理するのがよいと思います。 その「あるプログラム」が通常の実行ファイルだったら、forkして子プロセス側でexec関数で切り替えるのがよいと思います。 # 私なら、Perlの勉強でなければ、バックグラウンドで実行するようなシェルスクリプトでも書きますけど。