偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

術(shù)語(yǔ)匯編 Perl線程概述

開(kāi)發(fā) 架構(gòu)
本文向大家介紹一下Perl的概念,Perl線程是一個(gè)單一的執(zhí)行流程,它是所有程序執(zhí)行過(guò)程中最小的控制單位,即能被CPU所調(diào)度的最小任務(wù)單元。

本文首先概述了Perl線程的概念和意義,接著回顧了Perl語(yǔ)言中對(duì)Perl線程支持的演化歷史,然后通過(guò)一系列示例重點(diǎn)介紹了Perl中Perl線程的實(shí)現(xiàn),數(shù)據(jù)的共享以及Perl線程間的同步,最后歸納并總結(jié)了全文主要內(nèi)容。

Perl線程概述

Perl線程是一個(gè)單一的執(zhí)行流程,它是所有程序執(zhí)行過(guò)程中最小的控制單位,即能被CPU所調(diào)度的最小任務(wù)單元。Perl線程與進(jìn)程之間既有聯(lián)系,又完全不同。簡(jiǎn)單地說(shuō),一個(gè)Perl線程必然屬于某一個(gè)進(jìn)程,而一個(gè)進(jìn)程包含至少一個(gè)或者多個(gè)Perl線程。早期的計(jì)算機(jī)系統(tǒng)一次只能運(yùn)行一個(gè)程序,因此,當(dāng)有多個(gè)程序需要執(zhí)行的時(shí)候,唯一的辦法就是讓它們排成隊(duì),按順序串行執(zhí)行。進(jìn)程的出現(xiàn)打破了這種格局,CPU資源按時(shí)間片被分割開(kāi)來(lái),分配給不同的進(jìn)程使用。這樣一來(lái),從微觀上看進(jìn)程的執(zhí)行雖然仍是串行的,但是從宏觀上看,不同的程序已經(jīng)是在并行執(zhí)行了。如果我們把同樣的思想運(yùn)用到進(jìn)程上,很自然地就會(huì)把進(jìn)程再細(xì)分成更小的執(zhí)行單位,即Perl線程。由于一個(gè)進(jìn)程又往往需要同時(shí)執(zhí)行多個(gè)類(lèi)似的任務(wù),因此這些被細(xì)分的Perl線程之間可以共享相同的代碼段,數(shù)據(jù)段和文件句柄等資源。有了進(jìn)程,我們可以在一臺(tái)單CPU計(jì)算機(jī)系統(tǒng)上同時(shí)運(yùn)行Firefox和MicrosoftOfficeWord等多個(gè)程序;有了Perl線程,我們可以使Firefox在不同的標(biāo)簽里同時(shí)加載多個(gè)不同的頁(yè)面,在OfficeWord里編輯文檔的同時(shí)進(jìn)行語(yǔ)法錯(cuò)誤檢查。因此,Perl線程給我們帶來(lái)了更高的CPU利用率、更快速的程序響應(yīng)、更經(jīng)濟(jì)地資源使用方式和對(duì)多CPU的體系結(jié)構(gòu)更良好的適應(yīng)性。

Perl線程的歷史

5005threadsPerl線程模型

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

ithreadsPerl線程模型

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

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

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

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

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

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

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

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

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

  1. #!/usr/bin/perl  
  2. #  
  3. useConfig;  
  4.  
  5. if($Config{useithreads}){  
  6. printf("Helloithreads\n")  
  7. }  
  8. elsif($Config{use5005threads}){  
  9. printf("Hello5005threads\n");  
  10. }  
  11. else{  
  12. printf("Cannotsupportthreadinyourperlenvironment\n");  
  13. exit(1);  
  14. }  
  15.  

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

【編輯推薦】

  1. PePerl線程隊(duì)列和信號(hào)量概念解析
  2. Perl文件句柄概念詳解
  3. 追蹤調(diào)查 看Perl線程如何消亡
  4. 技術(shù)分享 如何創(chuàng)建Perl線程
  5. 學(xué)習(xí)筆記 深入剖析Perl線程的生命周期

 

責(zé)任編輯:佚名 來(lái)源: ibm.com
相關(guān)推薦

2010-07-13 10:21:19

2010-08-05 14:51:36

AdobeFlex

2010-07-26 16:54:15

Perl引用

2010-07-13 09:02:16

Perl

2010-07-20 09:05:08

Perl類(lèi)

2010-07-15 17:50:47

Perl模式

2010-07-30 10:23:46

Flex數(shù)據(jù)綁定

2010-09-13 13:27:25

CSS濾鏡

2010-07-15 15:47:46

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

2010-07-16 17:12:58

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

2010-07-14 11:27:42

Perl多進(jìn)程

2010-07-14 15:05:21

Perl文件句柄

2010-09-16 14:29:08

Java虛擬機(jī)

2010-07-13 09:58:51

Perl關(guān)聯(lián)數(shù)組

2010-06-07 13:02:46

Hadoop簡(jiǎn)介

2010-09-17 09:19:08

Java API

2010-07-27 08:59:19

FlexBuilder

2010-08-10 10:32:02

Flex語(yǔ)言

2010-06-10 18:27:00

UML語(yǔ)言

2010-07-20 16:25:50

Perl正則表達(dá)式
點(diǎn)贊
收藏

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