perl线程和模块
Posted BBio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl线程和模块相关的知识,希望对你有一定的参考价值。
perl
模块和线程
线程、进程、CPU
1#线程定义
2操作系统能够进行运算调度的最小单位
3
4#线程进程联系
5线程是进程的一部分,一个进程可以有多个线程
6
7#核心
8物理核:CPU中包含的物理内核个数
9虚拟核:用超线程技术将一个物理核模拟两个虚拟核,即每个核两个线程
perl
模块
1#创建模块
2package Test_aaa;
3#Exporter可以导出模块中的变量或子函数
4use Exporter;
5
6#my声明的是词法变量,只能在闭合块中使用,our声明的是包全局变量。@ISA是perl中类继承的写法,此处继承Exporter类。@EXPORT数组包含默认导出的变量和函数的名字,@EXPORT_OK中的方法必须被导入才能调用。
7our @ISA = qw(Exporter);
8our @EXPORT = qw(test scalar_package $scalar_package);
9our @EXPORT_OK = qw($scalar_package);
10
11our $scalar_package='a';
12
13sub test {
14 print "hello\n";
15}
16
17#perl模块结尾必须返回一个真值
181;
19
20
21#调用模块
22use Test_aaa;
23test(); #调用子程序
24print $Test_aaa::scalar_package; #调用标量
25print $scalar_package; #调用标量
perl
引用
1#引用
2my $ref=\$test;
3my $ref=\@test;
4my $ref=\%test;
5my $ref=['a','b'];
6my $ref={a=>'a',b=>'b'};
7#解引用
8my $var=$$ref;
9my @var=@$ref;
10my %var=%$ref;
11
12$ref->[0];
13$ref->{'key'};
14
15#子程序引用
16my $ref=\&mysub;
17my $ref=sub{...};
18#子程序解引用
19&{$ref}();
20&$ref();
21$ref->();
22
23#ref函数查看引用类型
24ref \$test;
25ref ['a','b'];
26ref sub{...};
perl队列和线程
1#Thread::Queue模块
2#threads模块
3
4use threads ('exit'=>'threads_only');
5use threads::shared;
6use Thread::Queue;
7
8#共享数据
9my $var:shared=0;
10my @array:shared=();
11my %hash=();
12share(%hash);
13
14#数据上锁
15lock(%hash); #防止共享数据出现冲突
16
17#创建队列
18my $q = Thread::Queue->new();
19$q->enqueue($item); #添加作业
20$q->end(); #停止添加作业
21my $left = $q->pending(); #队列中剩余的作业数
22my $item = $q->peek(1) #取出作业名
23$q->insert(1, $item1, $item2) #指定位置插入作业
24
25#创建线程
26my $thr = threads->create('func_name', ...); #第一个参数为子例程的名字,后面为子例程的参数
27my $thr = threads->create(sub { ... }, ...); #直接使用匿名子例程
28my $thr = threads->create(\&func, ...); #使用子例程的引用
29
30$thr->join(); #结合线程。任务完成,释放线程资源
31$thr->detach(); #剥离线程。子线程和主线程脱离,如果主线程先结束,则子线程强制结束
以上是关于perl线程和模块的主要内容,如果未能解决你的问题,请参考以下文章