私は OS に近いプログラミング手法には関与していませんが、知っているように、Perl で何かを並行して実行する場合に選択する武器はfork
、おそらくその上に構築されたいくつかの有用なモジュールです。のドキュメントページにfork
は次のように書かれています:
Does a fork(2) system call to create a new process running the same program at the same point.
結果として、多くのメモリを消費する大きなアプリケーションを持ちfork
、小さなタスクを呼び出すと、2 つの大きな perl プロセスが存在し、2 つ目のプロセスは単純な作業を行うためだけにリソースを浪費することになります。
問題はfork
、コードの切り離された部分を独立して実行し、必要なリソースだけを消費させるために何をすべきか (または、それが唯一の方法である場合はどのように使用するか) です。
非常に単純な例:
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 アプリケーションを実行している場合。