Perl-并发

考虑 threadsParallel::ForkManager 模块.

Parallel::ForkManager

查看 perldoc Parallel::ForkManager.

使用范式为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use Parallel::ForkManager;

my $pm = Parallel::ForkManager->new($MAX_PROCESSES);

DATA_LOOP:
foreach my $data (@all_data) {
# Forks and returns the pid for the child:
$pm->start and next DATA_LOOP;

... do some work with $data in the child process ...

$pm->finish; # Terminates the child process
}
$pm->wait_all_children;

这里需要理解 $pm->start and next DATA_LOO 这段代码.

$pm->start 就是调用 fork() 函数, 其返回 child process id 给 parent process, 返回 0 给 child process.

也就是说, 对于父进程, 由于返回值非零, 因此会执行 next DATA_LOOP, 进而创建下一个进程.

而对于子进程, 由于 $pm->start 的返回值为 0, 因此会执行下一行代码.

$pm->finish 用于结束子进程.


Perl-并发
http://example.com/2023/10/28/Perl-并发/
作者
Jie
发布于
2023年10月28日
许可协议