1. 程式人生 > >網絡編程之異步IO,rabbitMQ筆記

網絡編程之異步IO,rabbitMQ筆記

-- 一個 col 共享內存 共享數據 特定 pypy blog 滿足

對於網絡並發編程而言,多線程與多進程算是最常見的需求場景了。畢竟網站開放就是想要更多的流量訪問的。

回顧

回顧下之前學過的關於線程,進程和協程的知識點

IO密集型任務--用多線程更好
計算密集型任務
--用多進程更好

線程概念:計算機中工作的最小單元
進程:默認有主線程,可以有多線程共存,並共享內存資源。
協程:使用進程中的一個線程去做多個任務,微線程pypy
GIL:全局解釋器鎖,python特有,用於在進程中對所有線程加鎖,保證同時只能有一個線程被CPU調度

一句話說明什麽是協程:協程是一種用戶態的輕量級線程。

協程的特點:協程能保留上一次調用時的狀態(即所有局部狀態的一個特定組合),每次過程重入時,就相當於進入上一次調用的狀態,換種說法:進入上一次離開時所處邏輯流的位置。

那麽符合什麽條件我們可以稱之為協程?
協程需要滿足四個條件:

  1. 必須在只有一個單線程裏實現並發
  2. 修改共享數據不需加鎖
  3. 用戶程序裏自己保存多個控制流的上下文棧
  4. 一個協程遇到IO操作自動切換到其它協程

當然,協程也有自身的優缺點,這裏不展開。

在python中,我們可以輕松通過gevent實現並發同步或異步編程,在gevent中用到的主要模式是Greenlet, 它是以C擴展模塊形式接入Python的輕量級協程。 Greenlet全部運行在主程序操作系統進程的內部,但它們被協作式地調度。

網絡編程之異步IO,rabbitMQ筆記