技術分享 如何創建Perl線程
本文和大家重點討論一下Perl線程概念及創建過程,Perl線程是一個單一的執行流程,它是所有程序執行過程中最小的控制單位,即能被CPU所調度的最小任務單元。
Perl線程簡介
Perl線程是一個單一的執行流程,它是所有程序執行過程中最小的控制單位,即能被CPU所調度的最小任務單元。Perl線程與進程之間既有聯系,又完全不同。簡單地說,一個Perl線程必然屬于某一個進程,而一個進程包含至少一個或者多個Perl線程。早期的計算機系統一次只能運行一個程序,因此,當有多個程序需要執行的時候,唯一的辦法就是讓它們排成隊,按順序串行執行。進程的出現打破了這種格局,CPU資源按時間片被分割開來,分配給不同的進程使用。
這樣一來,從微觀上看進程的執行雖然仍是串行的,但是從宏觀上看,不同的程序已經是在并行執行了。如果我們把同樣的思想運用到進程上,很自然地就會把進程再細分成更小的執行單位,即Perl線程。由于一個進程又往往需要同時執行多個類似的任務,因此這些被細分的Perl線程之間可以共享相同的代碼段,數據段和文件句柄等資源。有了進程,我們可以在一臺單CPU計算機系統上同時運行Firefox和MicrosoftOfficeWord等多個程序;有了Perl線程,我們可以使Firefox在不同的標簽里同時加載多個不同的頁面,在OfficeWord里編輯文檔的同時進行語法錯誤檢查。因此,Perl線程給我們帶來了更高的CPU利用率、更快速的程序響應、更經濟地資源使用方式和對多CPU的體系結構更良好的適應性。
Perl線程的生命周期
創建Perl線程
Perl線程作為Perl中的一種實體,其一生可以粗略的分為創建,運行與退出這三個階段。創建使得Perl線程從無到有,運行則是Perl線程完成其主要工作的階段,退出自然就是指Perl線程的消亡。Perl線程的運行和普通函數的執行非常類似,有其入口參數,一段特定的代碼流程以及執行完畢后返回的一個或一組結果,唯一與普通函數調用的不同之處就在于新建Perl線程的執行與當前Perl線程的執行是并行的。
Perl里創建一個新的Perl線程非常簡單,主要有兩種方法,他們分別是:
使用threads包的create()方法,例如
清單3.通過create()方法創建Perl線程
- usethreads;
- subsay_hello
- {
- printf("Hellothread!@_.\n");
- return(rand(10));
- }
- my$t1=threads->create(\&say_hello,"param1","param2");
- my$t2=threads->create("say_hello","param3","param4");
- my$t3=threads->create(
- sub{
- printf("Hellothread!@_\n");
- return(rand(10));
- },
- "param5",
- "param6");
使用async{}塊創建Perl線程,例如
清單4.通過async{}塊創建Perl線程
- #!/usr/bin/perl
- #
- usethreads;
- my$t4=async{
- printf("Hellothread!\n");
- };
【編輯推薦】