Perl多进程及其和多线程的关系解析

开发 架构
本文介绍介绍了Perl多进程的用法和适用场景,以及Perl多进程和多线程的关系。同时结合企业级IT产品系统测试的自动化特点,介绍了Perl多进程在这方面的应用。

本文向大家介绍一下Perl多进程的用法和适用场景,以及Perl多进程和多线程的关系。在IT产品系统测试的自动化项目中,经常有并行处理多个子任务的需求,为了提高测试效率,就需要用到Perl多进程或者多线程编程。

Perl多进程技术在自动化测试中的应用

在IT产品系统测试的自动化项目中,经常有并行处理多个子任务的需求,为了提高测试效率,就需要用到Perl多进程或者多线程编程。文章介绍了Perl多进程的用法和适用场景,以及Perl多进程和多线程的关系。同时结合企业级IT产品系统测试的自动化特点,介绍了Perl多进程在这方面的应用。

Perl多进程

Perl语言是一种非常强大的脚本语言,其广泛应用于系统维护,CGI(CommonGatewayInterface)编程,数据库编程和自动化测试中。

多任务和并发处理一度被看作是判定优异操作系统的一个特性;同样任何优秀从而流行的编程语言都会有并发的应用,而且都有各自的实现方法。Perl最开始在并发方面的应用就是Perl多进程。

Perl多进程的用户接口是fork()函数以及对系统fork函数封装的一些module。我们在使用Perl语言编程时,如果一个任务的某一个段可以或者需要并发很多执行,那么我们就会使用Perl多进程编程,例如同时向数据库递交多个记录的查询,同时完成多个系统信息的收集等等。

Perl的Perl多进程是这样实现的:主进程每fork一个子进程,会把当前(主进程的)内存空间的所有变量都复制一份传到新的进程里面,达到数据共享的目的。此外,主进程和子进程可以通过信号、管道等来通信。

在处理并发的方案中,Perl多进程依靠内存空间独享提供了优秀的容错性和健壮性。一个Perl多进程的系统不会由于其中一个进程的状态不良而崩溃,每个进程都相对独立地运作,很少会相互影响。

内存空间独享也造就了Perl多进程不可避免的劣势:资源负荷以及通信复杂,对于Perl来说,每个子进程都可以看作主进程的拷贝,这多少有些内存浪费,而且主进程的关键变量如果是“浅复制”到子进程的话,将会带来一些意想不到的错误。另外,进程的创建和回收会带来许多额外的负载,因此应当尽量避免频繁地创建进程。

Perl多进程之间的通信方式有socket,管道,信号量等。在Linux平台上,对于进程间大量信息的交互情况,最常用的是文件;这在用户空间进程和系统内核空间进程之间的通信中的最为常用。

在谈起Perl多进程的时候,不可避免的要说说它与Perl多线程的关系。

Perl多进程和多线程的关系

如果我们需要执行一些各异的小任务,他们可能数量较多,但生存周期都比较短,或者他们可能共享大量数据,只有小部分的变量是自身的。这个时候,很自然就想到了多线程。

从Perl5.005开始,多线程的概念被引入Perl语言了;不过仅仅是概念而已。在Perl5.005中,线程模型默认共享所有的数据,而且数据的共享访问需要明确的同步操作。这个模型被称为“5005threads”,其实就是Perl多进程,只不过换了个“多线程”的概念。

到了Perl5.6,一个新的线程模型引入了,各个线程的数据默认是私有的,而且共享数据的访问需要显式地调用相关的函数来保证同步。这个模型称为“ithreads”。在Perl5.6中,ithreads模型并没有提供一些API供用户调用,仅作为一个内部的API供扩展使用。

到了Perl5.8,ithreads模型通过Perl的threads模块供用户使用,但是Perl5.8同时也保留了5005threads模型。这里,用户可以通过配置来选择使用哪一种模型。

对于***的Perl5.10,5005threads模型就不再使用了,已从Perl解释器中移除了。所以要使用真正意义的、稳定的多线程模块,建议使用Perl5.10解释器。2009年3月release的SLES11的安装包已经默认使用Perl5.10了。至此,Perl多进程和多线程应该是区别开来了。

Perl的threads模块提供的多线程,应用于我们经典的多线程编程例如SocketServer编程、硬件驱动或者适配层编程十分有效,然而对于非线程安全的一些函数或者模块调用就无能为力了,会导致不可预知的错误或者主进程的吊死、崩溃。

【编辑推荐】

  1. 实例解析Perl多进程技术的应用
  2. 常用Perl命令行参数应用介绍
  3. Perl多进程概念解析
  4. 术语汇编 Perl多进程概念详解
  5. 应用Perl多进程技术到自动化测试脚本
     
责任编辑:佚名 来源: ibm.com
相关推荐

2023-12-13 09:56:13

​多进程多线程协程

2010-07-15 12:51:17

Perl多进程

2010-07-15 13:13:21

Perl多进程

2010-07-14 11:27:42

Perl多进程

2019-02-26 11:15:25

进程多线程多进程

2021-04-20 12:39:52

Node.js多线程多进程

2021-08-04 23:30:28

Node.js开发线程

2021-06-11 06:54:35

PythonThreadingMultiproces

2022-03-09 17:01:32

Python多线程多进程

2023-12-11 18:18:24

Python编程线程

2020-04-07 11:10:30

Python数据线程

2023-11-01 11:20:57

2016-10-09 20:15:30

多线程多进程

2023-11-28 13:52:00

Python多进程多线程

2010-07-14 11:14:48

Perl多进程

2021-09-10 21:25:43

Redis分布式

2010-07-26 13:27:19

Perl多线程

2021-06-11 11:28:22

多线程fork单线程

2010-07-14 10:30:26

Perl多线程

2010-07-15 15:54:10

Perl守护进程
点赞
收藏

51CTO技术栈公众号