swoole 做一頓飯來理解協程

2021-10-07 02:19:04 字數 1283 閱讀 8344

協程可以簡單理解為執行緒,只不過這個執行緒是使用者態的,不需要作業系統參與,建立銷毀和切換的成本非常低,和執行緒不同的是協程沒法利用多核 cpu 的,想利用多核 cpu 需要依賴 swoole 的多程序模型。—— swoole 協程一章

可以把協程看成一道小學數學的一道題目:「合理安排時間」,來我們先做一道題目:

小明下班後回家煮飯,煲湯需要 10 分鐘,煮飯需要 8 分鐘, 炒菜需要 5 分鐘,,請問小明最少需要多少分鐘能煮好飯?

public

function

async()

總耗時:23 分鐘

**很容易看懂,等待湯煮好之後再煮飯,然後再等待飯煮好再炒菜,生活中不會這樣操作吧?這就要引入協程來解決這個問題了。

<?php

namespace

study\co

;use

swoole\coroutine

;use

swoole\coroutine\waitgroup

;use

swoole

;classco)

;// 記錄一下煮飯(記錄乙個任務)

$wg-

>

add();

// 建立乙個煮飯任務(開啟乙個新的協程)

coroutine:

:create

(function()

use(

$wg,

&$result))

;// 記錄一下炒菜

$wg-

>

add();

// 建立乙個炒菜任務(再開啟乙個新的協程)

coroutine:

:create

(function()

use(

$wg,

&$result))

;// 等待全部任務完成

$wg-

>

wait()

;// 返回資料(上菜!)

var_dump

($result);

});var_dump

('總耗時:'.(

time()

-$starttime).

' 分鐘');

}}

總耗時:10 分鐘

小明最少需要 10 分鐘能煮好飯。

swoole 學習筆記 做一頓飯來理解協程

簡介 最近學習 swoole 接觸到協程,記錄一下我理解到的協程。文章比較白話,而且目前理解的還非常淺,寫出自己的想法,請大佬們多多指點。協程協程可以簡單理解為執行緒,只不過這個執行緒是使用者態的,不需要作業系統參與,建立銷毀和切換的成本非常低,和執行緒不同的是協程沒法利用多核 cpu 的,想利用多...

swoole 學習筆記 做一頓飯來理解協程

簡介 最近學習 swoole 接觸到協程,記錄一下我理解到的協程。文章比較白話,而且目前理解的還非常淺,寫出自己的想法,請大佬們多多指點。協程協程可以簡單理解為執行緒,只不過這個執行緒是使用者態的,不需要作業系統參與,建立銷毀和切換的成本非常低,和執行緒不同的是協程沒法利用多核 cpu 的,想利用多...

swoole 學習筆記 做一頓飯來理解協程

簡介 最近學習 swoole 接觸到協程,記錄一下我理解到的協程。文章比較白話,而且目前理解的還非常淺,寫出自己的想法,請大佬們多多指點。協程協程可以簡單理解為執行緒,只不過這個執行緒是使用者態的,不需要作業系統參與,建立銷毀和切換的成本非常低,和執行緒不同的是協程沒法利用多核 cpu 的,想利用多...