技术分享 如何创建Perl线程

开发 架构
Perl线程与进程之间既有联系,又完全不同。简单地说,一个Perl线程必然属于某一个进程,而一个进程包含至少一个或者多个Perl线程。

本文和大家重点讨论一下Perl线程概念及创建过程,Perl线程是一个单一的执行流程,它是所有程序执行过程中最小的控制单位,即能被CPU所调度的最小任务单元。

Perl线程简介

Perl线程是一个单一的执行流程,它是所有程序执行过程中最小的控制单位,即能被CPU所调度的最小任务单元。Perl线程与进程之间既有联系,又完全不同。简单地说,一个Perl线程必然属于某一个进程,而一个进程包含至少一个或者多个Perl线程。早期的计算机系统一次只能运行一个程序,因此,当有多个程序需要执行的时候,唯一的办法就是让它们排成队,按顺序串行执行。进程的出现打破了这种格局,CPU资源按时间片被分割开来,分配给不同的进程使用。

这样一来,从微观上看进程的执行虽然仍是串行的,但是从宏观上看,不同的程序已经是在并行执行了。如果我们把同样的思想运用到进程上,很自然地就会把进程再细分成更小的执行单位,即Perl线程。由于一个进程又往往需要同时执行多个类似的任务,因此这些被细分的Perl线程之间可以共享相同的代码段,数据段和文件句柄等资源。有了进程,我们可以在一台单CPU计算机系统上同时运行Firefox和MicrosoftOfficeWord等多个程序;有了Perl线程,我们可以使Firefox在不同的标签里同时加载多个不同的页面,在OfficeWord里编辑文档的同时进行语法错误检查。因此,Perl线程给我们带来了更高的CPU利用率、更快速的程序响应、更经济地资源使用方式和对多CPU的体系结构更良好的适应性。

Perl线程的生命周期

创建Perl线程

Perl线程作为Perl中的一种实体,其一生可以粗略的分为创建,运行与退出这三个阶段。创建使得Perl线程从无到有,运行则是Perl线程完成其主要工作的阶段,退出自然就是指Perl线程的消亡。Perl线程的运行和普通函数的执行非常类似,有其入口参数,一段特定的代码流程以及执行完毕后返回的一个或一组结果,唯一与普通函数调用的不同之处就在于新建Perl线程的执行与当前Perl线程的执行是并行的。

Perl里创建一个新的Perl线程非常简单,主要有两种方法,他们分别是:

使用threads包的create()方法,例如

清单3.通过create()方法创建Perl线程
 

  1. usethreads;  
  2.  
  3. subsay_hello  
  4. {  
  5. printf("Hellothread!@_.\n");  
  6. return(rand(10));  
  7. }  
  8.  
  9. my$t1=threads->create(\&say_hello,"param1","param2");  
  10. my$t2=threads->create("say_hello","param3","param4");  
  11. my$t3=threads->create(  
  12. sub{  
  13. printf("Hellothread!@_\n");  
  14. return(rand(10));  
  15. },  
  16. "param5",  
  17. "param6");  
  18.  

 使用async{}块创建Perl线程,例如

清单4.通过async{}块创建Perl线程
 

  1. #!/usr/bin/perl  
  2. #  
  3. usethreads;  
  4.  
  5. my$t4=async{  
  6. printf("Hellothread!\n");  
  7. };  

【编辑推荐】

 

  1. 揭秘Perl线程历史
  2. 学习笔记 深入剖析Perl线程的生命周期
  3. 解析四大Perl操作符用法
  4. 专家推荐 几款常用Perl开发工具
  5. 学习笔记 Perl数字与字符串间的自动转换

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-20 16:00:09

Perl模块

2010-07-16 14:30:25

Perl数组

2010-07-19 13:42:04

Perl函数

2010-07-15 15:25:57

Perl线程

2010-07-15 14:54:50

Perl线程

2010-07-20 16:13:25

Perl线程

2010-07-16 13:21:26

Perl哈希表

2010-08-04 13:30:11

Flex项目

2010-03-15 17:56:23

Java多线程

2010-07-14 10:41:58

Perl线程

2010-07-15 15:39:51

Perl线程

2010-07-26 13:27:19

Perl多线程

2010-06-01 15:41:09

创建SVN仓库

2010-07-16 10:38:24

Perl关联数组

2010-07-28 12:41:18

Flex组件

2010-06-02 16:09:05

SVN协议

2010-07-19 16:56:56

Perl线程

2010-07-14 10:48:37

Perl线程

2010-07-07 14:33:11

UML序列图

2010-07-20 08:58:28

Perl类
点赞
收藏

51CTO技术栈公众号