自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Perl多進(jìn)程概念解析

開發(fā) 架構(gòu)
本文介紹了Perl多進(jìn)程的用法和適用場(chǎng)景,以及Perl多進(jìn)程和多線程的關(guān)系。同時(shí)結(jié)合企業(yè)級(jí)IT產(chǎn)品系統(tǒng)測(cè)試的自動(dòng)化特點(diǎn),介紹了Perl多進(jìn)程在這方面的應(yīng)用。

你對(duì)Perl多進(jìn)程的概念是否熟悉,它和多線程有什么區(qū)別呢,本文介紹了Perl多進(jìn)程的用法和適用場(chǎng)景,以及Perl多進(jìn)程和多線程的關(guān)系。

在IT產(chǎn)品系統(tǒng)測(cè)試的自動(dòng)化項(xiàng)目中,經(jīng)常有并行處理多個(gè)子任務(wù)的需求,為了提高測(cè)試效率,就需要用到多進(jìn)程或者多線程編程。本文介紹了Perl多進(jìn)程的用法和適用場(chǎng)景,以及Perl多進(jìn)程和多線程的關(guān)系。同時(shí)結(jié)合企業(yè)級(jí)IT產(chǎn)品系統(tǒng)測(cè)試的自動(dòng)化特點(diǎn),介紹了Perl多進(jìn)程在這方面的應(yīng)用。

Perl多進(jìn)程

Perl語(yǔ)言是一種非常強(qiáng)大的腳本語(yǔ)言,其廣泛應(yīng)用于系統(tǒng)維護(hù),CGI(CommonGatewayInterface)編程,數(shù)據(jù)庫(kù)編程和自動(dòng)化測(cè)試中。

多任務(wù)和并發(fā)處理一度被看作是判定優(yōu)異操作系統(tǒng)的一個(gè)特性;同樣任何優(yōu)秀從而流行的編程語(yǔ)言都會(huì)有并發(fā)的應(yīng)用,而且都有各自的實(shí)現(xiàn)方法。Perl最開始在并發(fā)方面的應(yīng)用就是多進(jìn)程。

Perl多進(jìn)程的用戶接口是fork()函數(shù)以及對(duì)系統(tǒng)fork函數(shù)封裝的一些module。我們?cè)谑褂肞erl語(yǔ)言編程時(shí),如果一個(gè)任務(wù)的某一個(gè)段可以或者需要并發(fā)很多執(zhí)行,那么我們就會(huì)使用Perl的多進(jìn)程編程,例如同時(shí)向數(shù)據(jù)庫(kù)遞交多個(gè)記錄的查詢,同時(shí)完成多個(gè)系統(tǒng)信息的收集等等。

Perl的多進(jìn)程是這樣實(shí)現(xiàn)的:主進(jìn)程每fork一個(gè)子進(jìn)程,會(huì)把當(dāng)前(主進(jìn)程的)內(nèi)存空間的所有變量都復(fù)制一份傳到新的進(jìn)程里面,達(dá)到數(shù)據(jù)共享的目的。此外,主進(jìn)程和子進(jìn)程可以通過信號(hào)、管道等來通信。

在處理并發(fā)的方案中,多進(jìn)程依靠?jī)?nèi)存空間獨(dú)享提供了優(yōu)秀的容錯(cuò)性和健壯性。一個(gè)多進(jìn)程的系統(tǒng)不會(huì)由于其中一個(gè)進(jìn)程的狀態(tài)不良而崩潰,每個(gè)進(jìn)程都相對(duì)獨(dú)立地運(yùn)作,很少會(huì)相互影響。

內(nèi)存空間獨(dú)享也造就了多進(jìn)程不可避免的劣勢(shì):資源負(fù)荷以及通信復(fù)雜,對(duì)于Perl來說,每個(gè)子進(jìn)程都可以看作主進(jìn)程的拷貝,這多少有些內(nèi)存浪費(fèi),而且主進(jìn)程的關(guān)鍵變量如果是“淺復(fù)制”到子進(jìn)程的話,將會(huì)帶來一些意想不到的錯(cuò)誤。另外,進(jìn)程的創(chuàng)建和回收會(huì)帶來許多額外的負(fù)載,因此應(yīng)當(dāng)盡量避免頻繁地創(chuàng)建進(jìn)程。

多進(jìn)程之間的通信方式有socket,管道,信號(hào)量等。在Linux平臺(tái)上,對(duì)于進(jìn)程間大量信息的交互情況,最常用的是文件;這在用戶空間進(jìn)程和系統(tǒng)內(nèi)核空間進(jìn)程之間的通信中的最為常用。

在談起Perl多進(jìn)程的時(shí)候,不可避免的要說說它與Perl多線程的關(guān)系。


Perl多進(jìn)程和多線程的關(guān)系


如果我們需要執(zhí)行一些各異的小任務(wù),他們可能數(shù)量較多,但生存周期都比較短,或者他們可能共享大量數(shù)據(jù),只有小部分的變量是自身的。這個(gè)時(shí)候,很自然就想到了多線程。

從Perl5.005開始,多線程的概念被引入Perl語(yǔ)言了;不過僅僅是概念而已。在Perl5.005中,線程模型默認(rèn)共享所有的數(shù)據(jù),而且數(shù)據(jù)的共享訪問需要明確的同步操作。這個(gè)模型被稱為“5005threads”,其實(shí)就是多進(jìn)程,只不過換了個(gè)“多線程”的概念。

到了Perl5.6,一個(gè)新的線程模型引入了,各個(gè)線程的數(shù)據(jù)默認(rèn)是私有的,而且共享數(shù)據(jù)的訪問需要顯式地調(diào)用相關(guān)的函數(shù)來保證同步。這個(gè)模型稱為“ithreads”。在Perl5.6中,ithreads模型并沒有提供一些API供用戶調(diào)用,僅作為一個(gè)內(nèi)部的API供擴(kuò)展使用。

到了Perl5.8,ithreads模型通過Perl的threads模塊供用戶使用,但是Perl5.8同時(shí)也保留了5005threads模型。這里,用戶可以通過配置來選擇使用哪一種模型。

對(duì)于最新的Perl5.10,5005threads模型就不再使用了,已從Perl解釋器中移除了。所以要使用真正意義的、穩(wěn)定的多線程模塊,建議使用Perl5.10解釋器。2009年3月release的SLES11的安裝包已經(jīng)默認(rèn)使用Perl5.10了。至此,多進(jìn)程和多線程應(yīng)該是區(qū)別開來了。

Perl的threads模塊提供的多線程,應(yīng)用于我們經(jīng)典的多線程編程例如SocketServer編程、硬件驅(qū)動(dòng)或者適配層編程十分有效,然而對(duì)于非線程安全的一些函數(shù)或者模塊調(diào)用就無能為力了,會(huì)導(dǎo)致不可預(yù)知的錯(cuò)誤或者主進(jìn)程的吊死、崩潰。

【編輯推薦】

 

  1. 術(shù)語(yǔ)匯編 Perl多進(jìn)程概念詳解
  2. Perl文件句柄概念詳解
  3. 解析四大Perl操作符用法
  4. 專家推薦 幾款常用Perl開發(fā)工具
  5. 實(shí)例解析Perl多進(jìn)程技術(shù)在自動(dòng)化測(cè)試中的應(yīng)用

 

責(zé)任編輯:佚名 來源: csdn.net
相關(guān)推薦

2010-07-14 11:27:42

Perl多進(jìn)程

2010-07-15 13:13:21

Perl多進(jìn)程

2010-07-26 09:45:09

Perl多進(jìn)程

2010-07-19 08:39:14

Perl包

2010-07-19 09:52:04

Perl標(biāo)量

2010-07-16 12:59:46

Perl簡(jiǎn)單變量

2010-07-14 11:14:48

Perl多進(jìn)程

2010-07-20 09:23:30

Perl構(gòu)造函數(shù)

2010-07-19 14:37:01

Perl進(jìn)程啟動(dòng)函數(shù)

2010-07-15 15:54:10

Perl守護(hù)進(jìn)程

2010-07-15 15:47:46

Perl守護(hù)進(jìn)程

2010-07-19 14:20:57

Perl函數(shù)

2010-07-15 13:21:46

Perl多進(jìn)程

2010-07-20 16:05:07

Perl包

2010-07-15 15:32:10

Perl線程

2010-07-26 09:53:08

Perl多進(jìn)程

2010-07-23 13:07:39

Perl

2010-07-13 09:50:55

Perl數(shù)組

2010-07-26 10:02:49

Perl多進(jìn)程

2010-07-20 14:41:55

Perl語(yǔ)法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)