私はOSに近いプログラミング手法に関与していませんが、私が知っているように、Perlで何かを並行して実行する場合、選択武器はfork
であり、おそらくそれに基づいて構築された有用なモジュールです。 fork
のdocページは言う:結果として独立して動作するコードの一部を切り離すPerlの技術とは何ですか?
Does a fork(2) system call to create a new process running the same program at the same point.
を、大量のメモリを消費し、小さなタスクのためfork
を呼び出すと、そこに2つの大きなperlのプロセスとなり、第二は、資源を無駄にすることを意味し、大きなアプリケーションを持ちますちょうど簡単な仕事をするだけです。
だから、質問は:(またはどのようにfork
を使用することが唯一の方法だ場合、)それはを必要とするだけのリソースを消費独立して実行されているコードの取り外した部分を持つために何をすべきか?ただ非常にsimpel例
:
use strict;
use warnings;
my @big_array = (1 .. 2000000); # at least 80 MB memory
sleep 10; # to have time to inspect easely the memory usage
fork();
sleep 10; # to have time to inspect easely the memory usage
と子プロセスが消費80+ MBを過ぎます。
明確にする:このデタッチコードと通信することが重要ではないですかねえ、バックグラウンドでこの単純なタスク私のために実行」と言うと、私は私を継続させるためにだけ可能であることを、何とかその結果を使用します一方、重い作業...と重いperlアプリケーションを実行しているときに私のリソース! "を無駄にしないでください。
子プロセスはすべての親の属性を継承します。私は思っていませんフォークでそれを回避するための実際の方法はありません。 – squiguy
'fork'は必須ではありません。どんな手法でも、「システム」を呼び出すことさえ可能です。 – ArtM