溫馨提示×

溫馨提示×

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

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

Perl線程的概念是什么

發(fā)布時間:2021-12-06 10:30:23 來源:億速云 閱讀:138 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Perl線程的概念是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Perl線程概述

Perl線程是一個單一的執(zhí)行流程,它是所有程序執(zhí)行過程中最小的控制單位,即能被CPU所調(diào)度的最小任務(wù)單元。Perl線程與進(jìn)程之間既有聯(lián)系,又完全不同。簡單地說,一個Perl線程必然屬于某一個進(jìn)程,而一個進(jìn)程包含至少一個或者多個Perl線程。早期的計算機(jī)系統(tǒng)一次只能運(yùn)行一個程序,因此,當(dāng)有多個程序需要執(zhí)行的時候,***的辦法就是讓它們排成隊,按順序串行執(zhí)行。進(jìn)程的出現(xiàn)打破了這種格局,CPU資源按時間片被分割開來,分配給不同的進(jìn)程使用。

這樣一來,從微觀上看進(jìn)程的執(zhí)行雖然仍是串行的,但是從宏觀上看,不同的程序已經(jīng)是在并行執(zhí)行了。如果我們把同樣的思想運(yùn)用到進(jìn)程上,很自然地就會把進(jìn)程再細(xì)分成更小的執(zhí)行單位,即Perl線程。由于一個進(jìn)程又往往需要同時執(zhí)行多個類似的任務(wù),因此這些被細(xì)分的Perl線程之間可以共享相同的代碼段,數(shù)據(jù)段和文件句柄等資源。有了進(jìn)程,我們可以在一臺單CPU計算機(jī)系統(tǒng)上同時運(yùn)行Firefox和MicrosoftOfficeWord等多個程序;有了Perl線程,我們可以使Firefox在不同的標(biāo)簽里同時加載多個不同的頁面,在OfficeWord里編輯文檔的同時進(jìn)行語法錯誤檢查。因此,Perl線程給我們帶來了更高的CPU利用率、更快速的程序響應(yīng)、更經(jīng)濟(jì)地資源使用方式和對多CPU的體系結(jié)構(gòu)更良好的適應(yīng)性。

--------------------------------------------------------------------------------

Perl線程的歷史

5005threadsPerl線程模型

Perl對Perl線程的支持最早可以追溯到1998年7月發(fā)布的Perlv5.005。其發(fā)布申明指出,Perlv5.005中加入了對操作系統(tǒng)級Perl線程的支持,這個新特性是一個實(shí)驗(yàn)性的產(chǎn)品,這也就是我們現(xiàn)在所稱的5005threadsPerl線程模型。對于5005threadsPerl線程模型來說,默認(rèn)情況下,所有數(shù)據(jù)結(jié)構(gòu)都是共享的,所以用戶必須負(fù)責(zé)這些共享數(shù)據(jù)結(jié)構(gòu)的同步訪問。如今5005threads已經(jīng)不再被推薦實(shí)用,Perlv5.10以后的版本里,也將不會再支持5005threadsPerl線程模型。

ithreadsPerl線程模型

2000年5月發(fā)布的Perlv5.6.0中開始引入了一個全新的Perl線程模型,即interpreterthreads,或稱為ithreads,也正是在這個版本的發(fā)布申明中***次提出了5005threadsPerl線程模型將來可能會被禁用的問題。盡管如此,ithreads在那個時候還是一個新的實(shí)驗(yàn)性的Perl線程模型,用戶并不能直接使用它,***的辦法是通過fork函數(shù)模擬。經(jīng)過兩年時間的發(fā)展,到2002年7月,Perlv5.8.0正式發(fā)布,這時ithreads已經(jīng)是一個相對成熟的Perl線程模型,發(fā)布申明中也鼓勵用戶從老的5005threadsPerl線程模型轉(zhuǎn)換到新的ithreadsPerl線程模型,并明確指出5005threadsPerl線程模型最終將被淘汰。本文后面所討論的所有內(nèi)容也都是基于新的ithreadsPerl線程模型。在ithreadsPerl線程模型中,最與眾不同的特點(diǎn)就在于默認(rèn)情況一下一切數(shù)據(jù)結(jié)構(gòu)都不是共享的,這一點(diǎn)我們會在后面內(nèi)容中有更深刻的體會。

現(xiàn)有環(huán)境支持哪種Perl線程模型

既然Perl中有可能存在兩種不同的Perl線程模型,我們很自然地就需要判斷現(xiàn)有Perl環(huán)境到底支持的是哪一種Perl線程實(shí)現(xiàn)方式。歸納起來,我們有兩種方法:

在shell里,我們可以通過執(zhí)行perl–V|grepusethreads命令來獲取當(dāng)前Perl線程模型的相關(guān)信息,例如

清單1.shell中查詢Perl當(dāng)前Perl線程模型

>perl-V|grepuse.*threads  config_args='-des-Doptimize=-O2-g-pipe-m32-march=i386-mtune=pentium4-Dversion=5.8.5  -Dmyhostname=localhost-Dperladmin=root@localhost-Dcc=gcc-Dcf_by=RedHat,Inc.  -Dinstallprefix=/usr-Dprefix=/usr-Darchname=i386-linux-Dvendorprefix=/usr  -Dsiteprefix=/usr-Duseshrplib-Dusethreads-Duseithreads-Duselargefiles-Dd_dosuid  -Dd_semctl_semun-Di_db-Ui_ndbm-Di_gdbm-Di_shadow-Di_syslog-Dman3ext=3pm-Duseperlio  -Dinstallusrbinperl-Ubincompat5005-Uversiononly-Dpager=/usr/bin/less-isr  -Dinc_version_list=5.8.45.8.35.8.25.8.15.8.0'  usethreads=defineuse5005threads=undefuseithreads=defineusemultiplicity=define

從結(jié)果中不難看出,在當(dāng)前的Perl環(huán)境中提供了對ithreadsPerl線程模型的支持。

在Perl程序中,我們也可以通過使用Config模塊來動態(tài)獲取PerlPerl線程模型的相關(guān)信息,例如

清單2.Perl程序中動態(tài)獲取當(dāng)前PerlPerl線程模型

#!/usr/bin/perl  #  useConfig;   if($Config{useithreads}){  printf("Helloithreads\n")  }  elsif($Config{use5005threads}){  printf("Hello5005threads\n");  }  else{  printf("Cannotsupportthreadinyourperlenvironment\n");  exit(1);  }

值得一提的是,對于5005threads和ithreadsPerl線程模型,Perl同時只能支持其中的一種。你不可能在某一個Perl環(huán)境中同時使用這兩種Perl線程模型。本文后面討論的所有內(nèi)容都是基于ithreadsPerl線程模型的。

以上是“Perl線程的概念是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

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

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

AI