免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3745 | 回复: 5
打印 上一主题 下一主题

求 Perl 多进程或是多线程方面资料 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-25 11:06 |只看该作者 |倒序浏览
10可用积分
因工作需要,求 Perl 多进程或是多线程方面资料, 请各们高手帮帮忙。

最佳答案

查看完整内容

http://perldoc.perl.org/threads.html

论坛徽章:
0
2 [报告]
发表于 2008-09-25 11:06 |只看该作者
原帖由 flying_168 于 2008-9-25 13:42 发表
请各位能提供 pdf 之类的文档。谢谢了。

http://perldoc.perl.org/threads.html

论坛徽章:
0
3 [报告]
发表于 2008-09-25 11:11 |只看该作者
perl多线程实现相关资料(我从网上搜的!)  
主题:[Perl文]简单多线程结构分析(转)  

发信人: dem0n4lex(啊神)

整理人: workingnow(2004-01-16 20:33:21), 站内信件   

[Perl文]简单多线程结构分析  

writer: demonalex  

email: demonalex_at_hackermail.com  


=============================================================================================================  
----------------------------------------------------------------------  
use Thread;  
#导入Thread包  
----------------------------------------------------------------------  
$thread=Thread->new(\&aaa,'aaa','bbb');  
#新建多线程对象变量$thread,第一个参数是以子程序方式的结构体,后面跟的  
#都是调用前面的那个子程序结构的实际参数。  
----------------------------------------------------------------------  
$result=$thread->join();  
#召回线程的返回。无参数,$result变量为返回值。注意:线程本身不能调用自  
#己的join()方法。  
----------------------------------------------------------------------  
$thread->detach();  
#使分线程与主线程分离。无返回值,无参数。注意:调用此步后就不能再在其他  
#线程调用关于这个线程的join()方法了。  
----------------------------------------------------------------------  
@thread_list=$thread->list();  
#返回正在运行的线程。无参数,返回值@thread_list为正在运行的线程的列表。  
----------------------------------------------------------------------  
$thread=Thread->self();  
#返回当前线程本身。无参数,返回值为当前线程的对象变量。  
----------------------------------------------------------------------  
$tid=$thread->tid();  
#返回多线程对象的tid值(附:tid为线程独有的id记号)。无参数,返回值为线程  
#的tid值。  
----------------------------------------------------------------------  
lock($aaa);  
#把进程中的某个变量锁住,以便某个线程不能改变其值。  
----------------------------------------------------------------------  
$thread=async{BLOCK};  
#创造新线程的另一种方式。参数BLOCK为命令行格式,返回值为线程对象变量。  
----------------------------------------------------------------------  
=============================================================================================================  
#实验:因为至今还不能很好地‘凌驾’这种‘技术’,因此不能提供良好的实验代码给大  
#家,望大家见谅。  
#!usr/bin/perl -w  
use IO::Socket;                                 #导入IO::Socket包  
use Thread;                                     #导入Thread多线程处理包  
$sock=IO::Socket::INET->new(Listen=>10,         #新建一个TCP、端口为5354、有10个监听队列的SOCKET  
                            LocalPort=>5354,  
                            Proto=>'tcp');  
while(1){                                       #进入典型的服务器循环体  
next unless $client=$sock->accept;              #ACCEPT  
Thread->new(\&IandO,$client);                   #成功ACCEPT后,进入一个线程,线程为I/O会话部分  
$client->close;                                 #结束客户端的会话  
}  
$sock->close;                                   #最后结束服务端SOCKET  
exit 1;                                         #退出程序  

sub IandO{                                      #线程核心子程序  
my $handle=shift;                               #将线程调用的参数吸入到变量$handle  
Thread->self->detach;                           #分离线程  
print $handle "HI!\n";                          #I/O操作  
return;                                         #返回主线程  
}  
#记住:服务端所谓‘多线程’中的线程其实是指整个SOCKET中的I/O会话部分。  
#注意线程核心子进程基本步骤:截取调用参数->分离主线程->I/O  
=============================================================================================================  
注意:在PERL5.X版下只有WIN32与部分*NIX支持多线程,MACPERL与部分*NIX还是不支持的。  



----
You may say I am a dreamer  
But I am not the only one  
I hope someday you will join us  
And the world will be as one.  

http://demonalex.dark2s.org  
  


  
作者: 61.128.167.* 2006-3-24 22:13   回复此发言   

--------------------------------------------------------------------------------

2 回复:perl多线程实现相关资料(我从网上搜的!)  
用perl实现多线程(转)
  


use strict;
use English '-no_match_vars';
use Errno qw(EAGAIN);
use threads;
use threads::shared;
my $items = 20; #需要处理的任务数
my $maxchild = 65; #最多线程数(1-65),perl最多允许64个子线程,加上主线程因此最多65个线程
my $pid;
my $forks: shared = 1; #当前线程数
print "startn";
my $item: shared = 0; #当前处理任务序号,起始序号为0
my $myid = 1; #当前线程序号
my $main_pid = $PID;
sub subprocess;
#最多$maxchild个线程完成$items项任务
while ($item<$items) {
FORK: {
#select undef,undef,undef,0.1;
if (($forks<$maxchild) && ($PID == $main_pid)) { #必须只允许主线程产生子线程
if ($pid = fork) { #主线程处理
$| = 1;
$forks++;
$myid++;
print "Starting Sub_Process$pid/$PID)n";
}elsif (defined $pid) { #子线程处理
$| = 1;
last unless (subprocess);
}elsif ($! == EAGAIN) { #子线程未创建成功
print "$!$forksn";
# EAGAIN is the supposedly recoverable fork error
sleep 5;
redo FORK;
}else { #不能创建子线程
# weird fork error
die "Can't fork: $!n";
}
}else { #所有线程处理
last unless (subprocess);
}
}
}

sub subprocess {
#由于$item是共享的且每个线程都能对其进行修改,因此为了保证当前线程任务序号的正确,必须将$item转入局部变量存储
my $sid; #存储线程当前处理任务序号。
{
lock($item);
$sid = $item;
$item++ if ($item < $items);
}
if ($sid < $items) { #任务处理
print "Child process($PID/$myid) start sid/$forksn";
print "$sidn";
sleep 1;
print "Child process($PID/$myid) end sid/$forksn";
return 1;
}elsif ($main_pid == $PID) { #主线程结束
wait; #结束前等待所有子线程结束
print "Main process $$/$myid endn";
exit 1;
}else { #子线程结束
print "Child process($PID/$myid) exit sid/$forksn";
exit 1;
}
}




- 作者: SuYogi 2004年08月6日, 星期五 10:37 加入博采

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [报告]
发表于 2008-09-25 11:23 |只看该作者
原帖由 ziggler 于 2008-9-25 11:11 发表
perl多线程实现相关资料(我从网上搜的!)  

有分LS怎么冲的那么快

论坛徽章:
0
5 [报告]
发表于 2008-09-25 11:25 |只看该作者
原帖由 ynchnluiti 于 2008-9-25 11:23 发表

有分LS怎么冲的那么快

这个还需要问吗?

论坛徽章:
0
6 [报告]
发表于 2008-09-25 13:42 |只看该作者
请各位能提供 pdf 之类的文档。谢谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP