Gevent官網文檔地址:http://www.gevent.org/contents.html
進程、線程、協程區分
我們通常所說的協程Coroutine其實是corporate routine的縮寫,直接翻譯為協同的例程,一般我們都簡稱為協程。
在linux系統中,線程就是輕量級的進程,而我們通常也把協程稱為輕量級的線程即微線程。
進程和協程
下面對比一下進程和協程的相同點和不同點:
相同點:
寄存器狀態,這個其實用于當你的執行流恢復后要做什么
而寄存器和棧的結合就可以理解為上下文,上下文切換的理解:
CPU看上去像是在并發的執行多個進程,這是通過處理器在進程之間切換來實現的,操作系統實現這種交錯執行的機制稱為上下文切換
操作系統保持跟蹤進程運行所需的所有狀態信息。這種狀態,就是上下文。
在任何一個時刻,操作系統都只能執行一個進程代碼,當操作系統決定把控制權從當前進程轉移到某個新進程時,就會進行上下文切換,即保存當前進程的上下文,恢復新進程的上下文,然后將控制權傳遞到新進程,新進程就會從它上次停止的地方開始。
不同點:
線程和協程
既然我們上面也說了,協程也被稱為微線程,下面對比一下協程和線程:
協程只是在單一的線程里不同的協程之間切換,其實和線程很像,線程是在一個進程下,不同的線程之間做切換,這也可能是協程稱為微線程的原因吧。
Gevent模塊
Gevent是一種基于協程的Python網絡庫,它用到Greenlet提供的,封裝了libevent事件循環的高層同步API。它讓開發者在不改變編程習慣的同時,用同步的方式寫異步I/O的代碼。
簡單示例:
import geventdef test1(): print 12 gevent.sleep(0) print 34def test2(): print 56 gevent.sleep(0) print 78gevent.joinall([ gevent.spawn(test1), gevent.spawn(test2),])
新聞熱點
疑難解答