走向并行系列之-使用ForkManager编写多进程程序
2013-07-26 20:37
274 查看
ForkManager下载地址: http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm fork函数创建进程
关于使用fork创建进程网上有很多优秀的实例,这里粘贴一例,演示新怎样创建一个新的进程:http://fuzhong1983.blog.163.com/blog/static/1684705201112405432663/
------------------------------------------
下面一段程序的作用是每隔1s创建一个新的进程,每个新创建的进程的作用是sleep(5)
use strict;use warnings;
for (my $i = 0; $i < 10; $i ++) {
##
==创建一个新的进程 ==
my
$pid = fork();
#如果创建失败,退出程序(ps:搞不明白,既然创建了,还能失败)
if
(!defined($pid)) {
print
"Error in fork: $!";
exit
1;
}
if
($pid == 0) {
##
== child proc ==
print
"Child $i : My pid = $$n";
sleep(5);
print
"Child $i : endn";
exit
0;
}
sleep(1);
}
exit 0;
关于进程的收割以及进程数量的控制,这里就不详述了。因为下面将要介绍一种更简单的控制进程的方法。
使用ForkManager创建并控制线程
先上实例,一句一句分析;
use Parallel::ForkManager; #申明模块;
use strict;use warnings;
my $MAX_PROCESSES=10; #申明最大进程数(一次创建的进程越多,越耗内存);
my $pm = new Parallel::ForkManager($MAX_PROCESSES); #创建一个实例;
#共有50个任务需要处理,系统中始终保持处理的进程数为10;
for(my $i=1;$i<=50;$i++){
#创建一个新进,使用next语句,进入下一个循环。每个进程的任务就是调用SLEEP函数
#当创建的进程数达到设定的阈值(10)时,主进程等待,知道有子进程运行完毕,新的进程将被创建;
my
$pid = $pm->start and next;
&SLEEP;
$pm->finish; #收割进程;
}
$pm->wait_all_children; #不知道为什么会有这句,但是是必须的;
sub SLEEP
{ sleep(5);
}
使用ForkManager创建进程,算是比较省心的了,我们不用管怎么来控制进程数量,怎么等待进程结束然后收割进程。当每个进程执行时间不一致时,ForkManager控制新建的进程逐一添加,最大化利用CPU。
关于使用fork创建进程网上有很多优秀的实例,这里粘贴一例,演示新怎样创建一个新的进程:http://fuzhong1983.blog.163.com/blog/static/1684705201112405432663/
------------------------------------------
下面一段程序的作用是每隔1s创建一个新的进程,每个新创建的进程的作用是sleep(5)
use strict;use warnings;
for (my $i = 0; $i < 10; $i ++) {
##
==创建一个新的进程 ==
my
$pid = fork();
#如果创建失败,退出程序(ps:搞不明白,既然创建了,还能失败)
if
(!defined($pid)) {
"Error in fork: $!";
exit
1;
}
if
($pid == 0) {
##
== child proc ==
"Child $i : My pid = $$n";
sleep(5);
"Child $i : endn";
exit
0;
}
sleep(1);
}
exit 0;
关于进程的收割以及进程数量的控制,这里就不详述了。因为下面将要介绍一种更简单的控制进程的方法。
使用ForkManager创建并控制线程
先上实例,一句一句分析;
use Parallel::ForkManager; #申明模块;
use strict;use warnings;
my $MAX_PROCESSES=10; #申明最大进程数(一次创建的进程越多,越耗内存);
my $pm = new Parallel::ForkManager($MAX_PROCESSES); #创建一个实例;
#共有50个任务需要处理,系统中始终保持处理的进程数为10;
for(my $i=1;$i<=50;$i++){
#创建一个新进,使用next语句,进入下一个循环。每个进程的任务就是调用SLEEP函数
#当创建的进程数达到设定的阈值(10)时,主进程等待,知道有子进程运行完毕,新的进程将被创建;
my
$pid = $pm->start and next;
&SLEEP;
$pm->finish; #收割进程;
}
$pm->wait_all_children; #不知道为什么会有这句,但是是必须的;
sub SLEEP
{ sleep(5);
}
使用ForkManager创建进程,算是比较省心的了,我们不用管怎么来控制进程数量,怎么等待进程结束然后收割进程。当每个进程执行时间不一致时,ForkManager控制新建的进程逐一添加,最大化利用CPU。
相关文章推荐
- 使用QPM编写PHP 多进程程序
- c++使用mpich库编写并行程序
- 幻世(OurDream)2D图形引擎使用教程17——易语言编写幻世程序系列(1)
- 使用 acl_cpp 的 HttpServlet 类及服务器框架编写WEB服务器程序(系列文章)
- 幻世(OurDream)2D图形引擎使用教程18——易语言编写幻世程序系列(2)
- 使用QPM编写PHP 多进程程序
- 编写高质量代码改善C#程序的157个建议——建议89:在并行方法体中谨慎使用锁
- 树莓派学习系列5——使用python编写简单的游戏程序
- 使用CodeBlocks编写OpenCL程序
- 使用 C++ 11 编写 Linux 多线程程序
- 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化
- 使用Boost.Asio编写通信程序
- 使用Python编写简单的画图板程序的示例教程
- 使用DotNetty编写跨平台网络通信程序
- linux下使用汇编语言编写hello world!程序
- Unix系列shell程序编写(下)
- [编写高质量代码:改善java程序的151个建议]建议58 强烈建议使用UTF-8编码
- [编写高质量代码:改善java程序的151个建议]建议76 集合运算时使用更优雅的方式
- Windows下使用GNUstep编写Object-C程序
- VC++下使用ADO编写数据库程序