【发布时间】:2013-02-19 16:55:15
【问题描述】:
我不参与接近操作系统的编程技术,但据我所知,当涉及到在 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 进程,而第二个将浪费资源来做一些简单的工作。
所以,问题是:要做什么(或如何使用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 应用程序时。
【问题讨论】:
-
子进程将继承其父进程的所有属性。我认为没有真正的方法可以通过分叉来解决这个问题。
-
使用
fork不是强制性的。任何技术都是可以接受的,甚至调用system。