|
導讀網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立... 網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。 本篇文章給大家帶來的內容是關于php協程的詳細講解(附示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。多任務 (并行和并發)在講協程之前,先談談多進程、多線程、并行和并發。 對于單核處理器,多進程實現多任務的原理是讓操作系統給一個任務每次分配一定的 CPU 時間片,然后中斷、讓下一個任務執行一定的時間片接著再中斷并繼續執行下一個,如此反復。 由于切換執行任務的速度非常快,給外部用戶的感受就是多個任務的執行是同時進行的。 多進程的調度是由操作系統來實現的,進程自身不能控制自己何時被調度,也就是說: 而協程要求當前正在運行的任務自動把控制權回傳給調度器,這樣就可以繼續運行其他任務。這與 協程的調度是由協程自身 回到剛才生成器實現 xrange 函數的例子,整個執行過程的交替可以用下圖來表示: 協程可以理解為 相對于進程或者線程,協程所有的操作都可以在用戶態而非操作系統內核態完成,創建和切換的消耗非常低。 簡單的說 我們可以把大任務拆分成多個小任務輪流執行,如果有某個小任務在等待系統 IO,就跳過它,執行下一個小任務,這樣往復調度,實現了 IO 操作和 CPU 計算的并行執行,總體上就提升了任務的執行效率,這也便是協程的意義 多線程 并發(Concurrency)是指能處理多個同時性活動的能力,并發事件之間不一定要同一時刻發生。 并行(Parallesim)是指同時發生的兩個并發事件,具有并發的含義,而并發則不一定并行。 并行和并發區別
協程協程的支持是在 同步代碼在沒有涉及到異步執行代碼之前,我們的代碼都是這樣的 function printNum($max, $caller)
{
for ($i=0; $i<$max; $i++ ) {
echo "調度者:" . $caller . " 打印:" . $i . PHP_EOL;
}
}
printNum(3, "caller1");
printNum(3, "caller2");
# output
調度者:caller1 打印:0
調度者:caller1 打印:1
調度者:caller1 打印:2
調度者:caller2 打印:0
調度者:caller2 打印:1
調度者:caller2 打印:2使用協程后改進的代碼初稿,手動調整生成器執行 # 本代碼手動調整了進程執行代碼的順序,當然本代碼實現不用協程也可以,只是利用本流程說明協程作用
# 生成器給了我們函數中斷,協程[生成器send]給了我們重新喚起生成器函數的能力
function printNumWithGen($max)
{
for ($i=0; $i<$max; $i++ ) {
$res = yield $i;
echo $res;
}
}
$gen1 = printNumWithGen(3);
$gen2 = printNumWithGen(3);
// 手動執行caller1 再 caller2
$gen1->send("調度者: caller1 打印:" . $gen1->current() . PHP_EOL);
$gen2->send("調度者: caller2 打印:" . $gen2->current() . PHP_EOL);
// 手動執行caller1 再 caller2
$gen1->send("調度者: caller1 打印:" . $gen1->current() . PHP_EOL);
$gen2->send("調度者: caller2 打印:" . $gen2->current() . PHP_EOL);
// 手動執行caller2 再 caller1
$gen2->send("調度者: caller2 打印:" . $gen2->current() . PHP_EOL);
$gen1->send("調度者: caller1 打印:" . $gen1->current() . PHP_EOL);
# output
調度者: caller1 打印:0
調度者: caller2 打印:0
調度者: caller1 打印:1
調度者: caller2 打印:1
調度者: caller2 打印:2
調度者: caller1 打印:2總結上面案例應該讓大家理解了協程設計的意義和如何使用協程 以上就是php協程的詳細講解(附示例)的詳細內容,更多請關注php中文網其它相關文章! 網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。 |
溫馨提示:喜歡本站的話,請收藏一下本站!