使用Parallel::ForkManager编写多进程程序
发布时间:2020-12-15 23:50:39 所属栏目:大数据 来源:网络整理
导读:ForkManager下载地址: http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm fork函数创建进程 关于使用fork创建进程网上有很多优秀的实例,这里粘贴一例,演示新怎样创建一个新的进程:http://fuzhong1983.blog.163.com/blog/static/1
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: $!";? ?} ?if ($pid == 0) { ## == child proc == print "Child $i : My pid = $$n"; sleep(5); print "Child $i : endn"; exit 0; ?sleep(1); } 关于进程的收割以及进程数量的控制,这里就不详述了。因为下面将要介绍一种更简单的控制进程的方法。 使用ForkManager创建并控制线程 先上实例,一句一句分析; use Parallel::ForkManager;? 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;? ?$pm->finish;? $pm->wait_all_children;? sub SLEEP {? 使用ForkManager创建进程,算是比较省心的了,我们不用管怎么来控制进程数量,怎么等待进程结束然后收割进程。当每个进程执行时间不一致时,ForkManager控制新建的进程逐一添加,最大化利用CPU。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |