網絡編程之異步IO,rabbitMQ筆記
阿新 • • 發佈:2018-02-21
-- 一個 col 共享內存 共享數據 特定 pypy blog 滿足
對於網絡並發編程而言,多線程與多進程算是最常見的需求場景了。畢竟網站開放就是想要更多的流量訪問的。
回顧
回顧下之前學過的關於線程,進程和協程的知識點
IO密集型任務--用多線程更好
計算密集型任務--用多進程更好
線程概念:計算機中工作的最小單元
進程:默認有主線程,可以有多線程共存,並共享內存資源。
協程:使用進程中的一個線程去做多個任務,微線程pypy
GIL:全局解釋器鎖,python特有,用於在進程中對所有線程加鎖,保證同時只能有一個線程被CPU調度
一句話說明什麽是協程:協程是一種用戶態的輕量級線程。
協程的特點:協程能保留上一次調用時的狀態(即所有局部狀態的一個特定組合),每次過程重入時,就相當於進入上一次調用的狀態,換種說法:進入上一次離開時所處邏輯流的位置。
那麽符合什麽條件我們可以稱之為協程?
協程需要滿足四個條件:
- 必須在只有一個單線程裏實現並發
- 修改共享數據不需加鎖
- 用戶程序裏自己保存多個控制流的上下文棧
- 一個協程遇到IO操作自動切換到其它協程
當然,協程也有自身的優缺點,這裏不展開。
在python中,我們可以輕松通過gevent實現並發同步或異步編程,在gevent中用到的主要模式是Greenlet, 它是以C擴展模塊形式接入Python的輕量級協程。 Greenlet全部運行在主程序操作系統進程的內部,但它們被協作式地調度。
網絡編程之異步IO,rabbitMQ筆記