IO密集型為什么使用多線程
python多線程,可以粗淺理解只用了cpu的一個核心。
為什么IO密集型用多線程?假設我們有多個線程都在發網絡請求(request, 等response),一個請求的從發出到接收的過程中cpu大多時間都是在等。
所以,當前線程發出請求后,由於不占用cpu資源,可以阻塞等待,然后cpu執行權可以被另外一個線程所享有去發網絡請求。
IO密集型,單個CPU利用率很低,可能只有10%,所以多線程可以提升cpu利用率,可能10個線程才能打滿一個核心, 從而多線程也有並行的效果。
所以python多線程 計算密集型沒救了么
Python社區也在非常努力的不斷改進GIL,甚至是嘗試去除GIL。並在各個小版本中有了不少的進步。有興趣的讀者可以擴展閱讀這個Slide 另一個改進Reworking the GIL
- 將切換顆粒度從基於opcode計數改成基於時間片計數
- 避免最近一次釋放GIL鎖的線程再次被立即調度
- 新增線程優先級功能(高優先級線程可以迫使其他線程釋放所持有的GIL鎖)