面試概念題

進程、線程、協程的區別?程序員

進程:計算機用來分配資源的最小單元,本質上是用來處理數據隔離的。多線程

線程:cpu用來計算的最小單元,線程是真正用來作事的。併發

一個進程能夠有多個線程。一個應用程序能夠有多個進程。可是由於Python特有的GIL鎖的緣故,形成了它和Java等語言多線程的差別,框架

在同一時刻,一個進程中只有一個線程能被cpu調度。因此在處理計算密集型數據時,須要開多進程來獲取高效率。spa

在處理io密集型數據時,能夠使用多線程提升效率。由於io操做不佔用cpu線程。線程

GIL鎖控制進程,本質上就是對Python的底層C語言上鎖了。協程

協程:其實就是微線程。對線程進行切片,在不一樣的時間,對多個線程片進行調度,遇到io操做,就去執行其餘操做。當io操做的處理結果回來後,會切換回去。進程

協程自己是不存在的,是程序員爲了達到控制代碼的執行塊而產生的。Python實現協程的模塊greenlet ,實現協程+IO操做能夠用模塊gevent事件

單線程實現併發:資源

協程+IO切換 :模塊gevent 

基於事件循環的IO非阻塞框架:Twisted

相關文章
相關標籤/搜索