这个函数当前在学校没有搞懂, 刚从学校出来时也没搞懂, 不会用他来写多线程程序. 今天有人问我在Perl中如何进行多进程编程, 去Google了一把, 发现境界好象比以前高了, 因为感觉上懂了一些了. 下面是写的一个例子:
毕业后的这么多年中, 只有用Java来写过多线程序, 不过它可没有fork函数, 但感觉上, 他们也没有什么区别. 看来可以为refresh_mysql.pl角本增加并行执行支持了. cool!
perl 语言编程实例-多进程篇[转]
作者:horsley
perl 语言编程实例-多进程篇
perl 语言是一种非常强大的脚本语言,其应用遍及系统维护,CGI,数据库编程。
以下是我遇到的一个具体问题,应用perl获得解决。
问题提出:
某数据库应用。需要检索一批数据(A表,数据量12万左右)。对该批数据
将进行逐一核对,期间将关联三个千万级的表(C,D,E表,分别有近亿条数据),
并将检索状态插入一张新表(F)。
传统解决方案:
编写存储过程。打开一个cursor,对A表遍历,逐一检索C,D,E表。
判断状态写入新表。编程过程十分简单,顺利完成。但执行时效率低下,耗时在
8小时左右,不能满足要求。
分析:
C,D,E表建有极其完备的索引。对单条数据检索极其快速。同时执行时主机CPU
,
内存等资源十分空闲。查询单条记录耗时:8×3600/12万=0.24秒,也是在合理的
范围。
同时主机数据库在业务高峰期时可以支持500-600用户同时登陆(telnet方式)。
以上
说明性能瓶颈不在主机,数据库上。
结论:以上所有都合情合理,采用单进程方式无法进一步提高性能。为提高速度,
只能
采用多进程。
快速构造原型:
原型一:
#!/usr/bin/perl
my $maxchild=20;
foreach $item (1..500) {
while ( `ps -ef|grep $0|wc -l` > $maxchild) { select undef,undef,undef,0.1; };
if ($PID=fork()){
print "Starting Sub_Process