Perl多线程和多进程实例,纯英文的,英语强的朋友参考下吧。技术文章,当然还是外文的强啊,你懂的。
Added by Andree Toonk, last edited by Andree Toonk on May 27, 2009 (view change)
Comment: Below you'll find an example of a multi-threaded Perl program as well as a forked Perl program.Both seem to work fine. A disadvantage of threads is that Perl needs to be compiled with threads support.Not all versions of Perl come with that by default.
A Perl Thread example
#!/usr/local/roadm/bin/perl
# This is compiled with threading support
use strict;
use warnings;
use threads;
use threads::shared;
print "Starting main programn";
my @threads;
for ( my $count = 1; $count <= 10; $count++) {
my $t = threads->new(&sub1, $count);
push(@threads,$t);
}
foreach (@threads) {
my $num = $_->join;
print "done with $numn";
}
print "End of main programn";
sub sub1 {
my $num = shift;
print "started thread $numn";
sleep $num;
print "done with thread $numn";
return $num;
}
Will print:
Starting main program
started thread 1
started thread 2
started thread 3
started thread 4
started thread 5
started thread 6
started thread 7
started thread 8
started thread 9
started thread 10
done with thread 1
done with 1
done with thread 2
done with 2
done with thread 3
done with 3
done with thread 4
done with 4
done with thread 5
done with 5
done with thread 6
done with 6
done with thread 7
done with 7
done with thread 8
done with 8
done with thread 9
done with 9
done with thread 10
done with 10
End of main program
Perl Fork example
This examples fork 10 child processes.
It will wait for all childs to finish before exiting.
#!/usr/local/roadm/bin/perl
use strict;
use warnings;
print "Starting main programn";
my @childs;
for ( my $count = 1; $count <= 10; $count++) {
my $pid = fork();
if ($pid) {
# parent
#print "pid is $pid, parent $$n";
push(@childs, $pid);
} elsif ($pid == 0) {
# child
sub1($count);
exit 0;
} else {
die "couldnt fork: $!n";
}
}
foreach (@childs) {
my $tmp = waitpid($_, 0);
print "done with pid $tmpn";
}
print "End of main programn";
sub sub1 {
my $num = shift;
print "started child process for $numn";
sleep $num;
print "done with child process for $numn";
return $num;
}
Output looks like:
Starting main program
started child process for 1
started child process for 2
started child process for 3
started child process for 4
started child process for 5
started child process for 6
started child process for 9
started child process for 10
started child process for 7
started child process for 8
done with child process for 1
done with pid 5584
done with child process for 2
done with pid 5585
done with child process for 3
done with pid 5586
done with child process for 4
done with pid 5587
done with child process for 5
done with pid 5588
done with child process for 6
done with pid 5589
done with child process for 7
done with pid 5590
done with child process for 8
done with pid 5591
done with child process for 9
done with pid 5593
done with child process for 10
done with pid 5594
End of main program
本文来源:http://wiki.bc.net/atl-conf/pages/viewpage.action?pageId=20548191