溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Perl多進(jìn)程和多線程有什么用關(guān)系

發(fā)布時(shí)間:2021-12-07 09:18:43 來(lái)源:億速云 閱讀:263 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Perl多進(jìn)程和多線程有什么用關(guān)系的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

Perl多進(jìn)程技術(shù)在自動(dòng)化測(cè)試中的應(yīng)用

在IT產(chǎn)品系統(tǒng)測(cè)試的自動(dòng)化項(xiàng)目中,經(jīng)常有并行處理多個(gè)子任務(wù)的需求,為了提高測(cè)試效率,就需要用到Perl多進(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最開(kāi)始在并發(fā)方面的應(yīng)用就是Perl多進(jìn)程。

Perl多進(jìn)程的用戶(hù)接口是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è)記錄的查詢(xún),同時(shí)完成多個(gè)系統(tǒng)信息的收集等等。

Perl的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)程可以通過(guò)信號(hào)、管道等來(lái)通信。

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

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

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

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

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

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

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

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

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

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

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

感謝各位的閱讀!關(guān)于“Perl多進(jìn)程和多線程有什么用關(guān)系”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI