這兩天在研究 gevent 和 zeromq 兩個庫。 zeromq 暫時不說, 一直在用 python 搭建一些快速服務原型,所以對 gevent 做乙個總結。
gevent 的核心在於併發, 它的技術核心主要表現在協程(coroutine)層面。利用libev 庫幫助python在同乙個執行緒內以極小的代價高效的管理多個 coroutine。
本質上 gevent 在同乙個時間片內只能處理一段**,雖然表現層面上看起來可以處理大量的併發 coroutine但是如果不是在處理密集型io的應用上其作用是相當有限。
因為是gevent 是利用到 libev對io的非同步讀寫能力,在coroutine內部發生無法立即完成的操作時,將時間片切換到其他的 coroutine。 這些操作包括了(sleep, write, read以及自建的 queue, event,lock 等等)
雖然 gevent 的 coroutine 的執行順序是確定性的(不同於真正的執行緒競爭cpu時間片),但是同樣帶來了資源競爭的問題,所以在編寫
gevent 的**時同樣需要對 多個 coroutine 訪問的資料進行枷鎖操作。
暫時了解就這麼多。
對於棧學習的總結
目錄 1.新建棧型別 2.棧的初始化 3.棧的建立 4.出棧 5.入棧 6.棧的輸出 7.測試 8.總結 棧是一種僅限於在表尾進行插入和刪除操作的線性表,和之前介紹過的線性表一樣,它也有線性和鏈式兩種結構,在這裡我向大家介紹線性棧的建立與使用,鄙人只是理工大的一名大二的學生,不對的地方請大家多多指教...
Python yield協程 gevent的理解
如 import time defa for i in range 10 yield time.sleep 1 defb for i in range 10 yield time.sleep 1 a1 a b1 b while1 next a1 next b1 由於yield的可以暫停函式的執行,也...
對於select理解總結
select用途 在一段時間內,監聽使用者感興趣的檔案描述符上的可讀可寫和異常等時間。對於select函式的介面 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout nf...