1. 程式人生 > >區分python進程、線程、攜協程

區分python進程、線程、攜協程

使用 輕量 cpu 資源 使用場景 服務器 線程 用戶態 數據

進程:

  概念:對各種資源管理的集合。(線程也是一種資源)

  使用場景:CPU密集型運算,調用多進程,通過socket傳輸數據

線程:

  概念:CPU運算的最小單元

  使用場景:沒有明確的切換條件,只能通過定時器切換

  註:python中只允許單線程操作內存中數據,也就是說用python即使開了多個線程實際上也是切換執行,並沒有利用CPU的多核性能。究其原因,是python的全局解釋器鎖(GIL)。個人覺得,設計GIL與python的出發點相符,讓程序更加簡單,節省程序員時間,所以應用粗粒度的線程鎖可以免去程序員對線程鎖的繁雜操作。python也並不是設計成解決CPU密集型的計算問題,所以多線程的應用在解決非CPU密集型問題上沒什麽幫助。python作為膠水語言,可以通過黏合其他語言來解決此類問題。

協程:

  概念:用戶態的輕量級線程

  使用場景:有明確的切換條件

  註:事件驅動本質上就是協程的思維。通過I/O多路復用(select、poll、epoll)方式來解決服務器與客戶端數據收發的問題。

區分python進程、線程、攜協程