1. 程式人生 > >網絡編程之線程,攜程,進程的區別

網絡編程之線程,攜程,進程的區別

ted 特殊 gre 分配 系統資源 問題 並不是 框架 nag

首先我們來說一下進程、線程還有協程它們三個的區別?

  進程作為操作系統資源分配的最小單位,可以在進程和進程之間進行數據隔離,如果有特殊需要通過Manager進行進程間的數據共享,而線程才是執行程序,與CPU進行交互的最小單位,一個CPU同時只能與一個線程進行交互,所以CPU個數與線程數相等才能發揮多線程最大的優勢,但是遺憾的時Python中以為有GIL鎖的存在,並不能這麽做,GIL鎖的存在限制了在同一時間一個進程中只能有一個線程與CPU進行交互,但是這並不影響Python多線程進行IO操作的效率,因為IO操作並不占用CPU,如果是計算密集型,Python就沒有辦法了,只能是用多進程來提升程序的效率了.再說協程,協程在真正意義上並不是真實存在的,通過gevent框架利來實現協程,主要是為了解決阻塞問題,可以發揮線程的最大效率,不必讓線程發出請求後傻傻的等,原理是讓對一個線程進行分片,在執行是遇到IO操作就直接調用另一個模塊greenlet的switch方法來切換代碼塊.實現高效率的多線程,不只有gevent可以實現協程,還有Twisted,這兩個的底層原理都是基於時間循環實現的異步非阻塞框架.

網絡編程之線程,攜程,進程的區別