为什么下面的代码:
#!/usr/bin/perl use strict; use warnings; use Parallel::ForkManager; my $pm = new Parallel::ForkManager(5); my @all_data = ('a','b','c','d','e','f'); foreach my $data (@all_data) { # Forks and returns the pid for the child: my $pid = $pm->start and next; print "Hello $pid\n"; $pm->finish; # Terminates the child process } $pm->wait_all_children;
打印:
Hello 0 Hello 0 Hello 0 Hello 0 Hello 0
我是Perl的新手,我正试图赶上Perl中的多处理
从start
方法的文档 :
这个方法做叉子。 它返回父进程的子进程的PID,而子进程返回0。
碰巧, fork
函数也是一样的,这就是为什么start
镜像它的原因。
父母可能需要孩子PID来控制孩子 – 发送信号和东西 – 但孩子通过$$
变量知道自己的PID:
foreach my $data (@all_data) { $pm->start and next; print "Hello $$\n"; $pm->finish; }
示例输出:
Hello 22215 Hello 22218 Hello 22219 Hello 22217 Hello 22220 Hello 22216
我的$ pid = $ pm->开始和下一个;
“和”逻辑将评估为真,如果两个参数都是真的。 如果第一个参数是false,那么“和”逻辑将会快捷,并且不会评估第二个参数
您可能想要使用“或”逻辑。