Perl多线程的两种实现方式

开发 架构
Perl语言中的Perl多线程你是否熟悉,这里向大家介绍一下,Perl多线程的实现一般有两种办法,而老版本的办法实际上是一种多进程的办法。

本文和大家重点讨论一下Perl多线程的概念,Perl多线程的实现一般有两种办法,分别是Thread->New和IThread,在这里向大家做一下详细介绍,希望对你的学习有所帮助。

Perl语言的Perl多线程

Perl多线程的实现一般有两种办法,而老版本的办法实际上是一种多进程的办法。

一、Thread->New

该办法是传统的老办法,它与folk很类似,新建一个进程时,会把当前内存空间的所有变量都复制一份传到新的进程里面。已实现共享数据。而随着技术的发展,本文不针对该方法做深入研究。

二、IThread

这种方法是通过新建一个新的perlinterpreter。默认情况下,所有的数据和变量是不被线程共享的。如果想共享一个变量,需通过threads::shared来实现。在使用此方法的时候,需要注意以下三点:

◆变量默认是不在线程中共享的。
◆通过"usethreads"引用命名空间,不能通过eval,do,或者require。
◆如果有变量需要共享,必须引用"threads::shared"。并在定义变量的时候如下:
my$var1:shared="value";

以下是一个简单的使用Perl多线程的例子。

很多时候使用Perl多线程可以达到很不错的效果,可以节约很多时间完成很复杂的工作。但通过perlthreads模块的描述文件可以看到,它也有很多缺点。比如说在使用Perl多线程的时候,必须的保证所有引用的模块都是支持thread。而在实际应用中,我们很难做到这样。比如我们要Perl多线程,但同时要应用OLE模块去操作activex。此用例应该是一种很常见的用例。那是不是意味着此时我们不得不放弃使用Perl多线程呢。非也,本文介绍一种可以使用Perl多线程和ole的例子。

在http://www.cpan.org/官方网站上对这种情况给出的方案是:

 

  1. Ifthemodulewillonlybeusedinsideathread,youcantryloadingthemodulefrominsidethethreadentrypointfunctionusingrequire(andimportifneeded):  
  2.  
  3. subthr_func  
  4. {  
  5. requireUnsafe::Module  
  6. #Unsafe::Module->import(...);  
  7. ....  
  8. }  
  9. Ifthemoduleisneededinsidethemainthread,trymodifyingyourapplicationsothatthemoduleisloaded(againusingrequireand->import())  
  10.  
  11. afteranythreadsarestarted,andinsuchawaythatnootherthreadsarestartedafterwards。  
  12.  

 

再次,主要讨论一下第二种情况,既主要是该非thread模块放到方法中引用。

【编辑推荐】

  1. 浅析Perl正则表达式在PHP的实现
  2. 经验总结 Perl的安装配置步骤
  3. Perl二维数组用法全程剖析
  4. 解析Perl面向对象编程的两种实现方式
  5. Perl正则表达式语法解析

 

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

2010-07-13 14:54:15

Perl面向对象编程

2010-07-15 14:38:55

Perl eval函数

2011-07-01 17:50:13

Python 多线程

2010-02-02 14:32:32

Python线程编程

2010-07-13 10:47:18

Perl面向对象

2021-12-08 10:47:35

RabbitMQ 实现延迟

2018-04-02 14:29:18

Java多线程方式

2009-06-15 15:02:48

Spring定时器

2022-06-08 15:12:34

前端前端截图

2011-03-03 10:26:04

Pureftpd

2010-07-19 14:07:09

Perl ->符号

2021-05-27 10:57:01

TCP定时器网络协议

2020-05-11 13:03:03

SR-TEIP路由器

2023-05-31 19:10:31

2010-08-06 09:38:11

Flex读取XML

2023-03-29 13:06:36

2015-10-09 09:51:29

Web API认证

2009-06-25 13:43:00

Buffalo AJA

2010-10-21 16:24:18

sql server升

2010-09-28 15:12:27

Javascript
点赞
收藏

51CTO技术栈公众号