python協程是什麼?

時間 2021-06-03 15:41:31

1樓:雞蛋有點黃

協程和程序的區別其他答案都寫的很好了,我就是複製一下流暢的python書中對執行緒和協程的比較說明

如果使用執行緒做過重要的程式設計,你就知道寫

出程式有多麼困難,因為排程程式任何時候都能中斷執行緒。必須記住保留鎖,去保護程式

中的重要部分,防止多步操作在執行的過程中中斷,防止資料處於無效狀態。

而協程缺省會做好全方位保護,以防止中斷。我們必須顯式產出才能讓程式的餘下部分運

行。對協程來說,無需保留鎖,在多個執行緒之間同步操作,協程自身就會同步,因為在任

意時刻只有乙個協程執行。想交出控制權時,可以使用 yield 或 yield from 把控制權

交還排程程式。這就是能夠安全地取消協程的原因:按照定義,協程只能在暫停的 yield

處取消,因此可以處理 CancelledError 異常,執行清理操作。

摘自第十八章

總而言之,協程比執行緒更節省資源,效率更高,並且更安全。

2樓:

點鏈結自己看 http://www.

3樓:如此這般

你行你就上,不行旁邊等著讓別人上,啥時候行了你再上。

我對協程的定義是:協程是在乙個執行緒執行過程中可以在乙個子程式的預定或者隨機位置中斷,然後轉而執行別的子程式,在適當的時候再返回來接著執行。他本身是一種特殊的子程式或者稱作函式。

區別:樓上很好很精闢。

應用:協程基於generator,Python3中內建了非同步IO。遇到IO密集型的業務時,總是很費時間啦,多執行緒加上協程,你磁碟在那該讀讀該寫寫,我還能去幹點別的。

在WEB應用中效果尤為明顯。

4樓:Sion Wang

所謂協程,就是同時開啟多個任務,但一次只順序執行乙個。等到所執行的任務遭遇阻塞,就切換到下乙個任務繼續執行,以期節省下阻塞所占用的時間。

而多執行緒就是純粹的併發模型了,同時執行多個任務,系統每次處理多個任務遞交的請求之一,類似於邊吃飯邊喝水的意思。

單程序下協程和多執行緒區別並沒有很大,而多程序下,多執行緒可以利用多核資源,這是單程序的協程模型做不到的。

python中的協程(yield)內部是怎麼實現的?python和lua在yield的實現原理上有什麼區別?

可能某個yield下呼叫棧是這樣 main resume Perm Perm list,3 Perm list,2 Perm list,1 yield list 對於Lua來說,程式會從yield直接跳到resume,等下次resume再回到Perm list,1 裡面yield。對於Python來...

PHP 的協程化是什麼意思?

沒啥複雜的東西。磁碟IO,網路IO一般都是同步阻塞的。像你上述提到的三個類庫,都是網路IO,一般情況下都是同步阻塞的方式。1.並不是 協程化 之後才能用 不修改,同步阻塞操作會阻塞整個程序,能處理的併發請求就少了,就失去了使用協程的初衷了。2.第三方類庫一般都設計的很好,只要自定義乙個handler...

PHP的協程跟GO的協程實現有什麼區別?

Shulamith 黑色高階車和白色低階車的區別 swoole那個基本上就是最常見的有棧協程的實現,各種語言社群裡一抓一大把,主要作用是給只會 只能用PHP的程式設計師打雞血.go的實現則比較高階,主要優勢在於 跑在多個系統執行緒上,可以充分利用多核 讓出執行權的節點不只是io,還有函式呼叫 xtl...