- 多线程的概念
多线程的概念在所有操作系统的书总都有讲到,所谓多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。
- Perl的多线程
目前Perl多线程有3个模块,POE模块,Thread模块,threads模块。POE模块经过李昕前期的分析,认为不太好用,不太容易理解,有时候会出现CPU高的问题。而Thread模块由于不稳定性和windows平台下的缺陷,目前已经被threads模块替代,目前CPAN主要推荐的是threads模块。
threads模块主要涉及threads和threads::shared两个主要模块
- threads模块介绍
threads基于一个不同于Thread的多线程模型---解释器多线程,从Perl v5.6.0开始支持,目前我们PAT使用的版本是Perl v5.8.7。在这个模型中,每个线程运行在自己的perl解释器中,默认情况下,各个线程间不共享变量。如果需要在线程间共享变量需要明确指出(采用threads::shared)。注意,这和我们平常理解的多线程模型有所不同,编码时要特别注意这一点。
下面介绍下threads多线程的一些关键内容:
- 采用create或者new方法来创建线程
Use threads;
$thr = threads->new(\&sub1, "Param 1", "Param 2");
Sub sub1 {
My @para = @_;
Print “Get parameters:”,join(“,”,@para),”\