IO密集型和計算密集型


我們常說的多任務或者單任務分為兩種:
    IO密集型的任務 
    計算密集型的任務
 
IO密集型的任務或:
有阻塞的狀態,就是不一直會運行CPU(中間就一個等待狀態,就告訴CPU 等待狀態,這個就叫IO密集型),例如:sleep 狀態等
 


這個上面代表了IO密集型. 
 
計算密集型的任務:
  反過來沒有等待狀態就是計算密集型,從上到下執行,沒有任何等待 
 

cpython無法同時利用多個CPU運行:
我們用的主流python叫cpython,在同一時刻,多個線程運行是相互搶占資源允許的,cpython無法把線程分配到多個CPU運行,就造成了計算密集型無法使用多個CPU 同時運行.這是由於cpython在運行的時候就加了一把鎖(GIL),這是一個歷史問題.
說白了python是沒有多線程,因為同一時刻只能運行一個線程(多個線程分配到多個CPU運行,才是真正意義上面多線程,python無法做到.)

 

總結:

  如果任務是IO密集型的,可以使用多線程(阻塞等待時,就釋放GIL,給另一個線程執行的機會)  

    如果是計算密集型的,無法使用多線程(如果遇到CPU密集型的線程,一直占用CPU,不會被I/O阻塞,是不是其它線程就沒有機會執行了呢? 其實不是,為了避免這種情況,我們前面說過有系統切換CPU輪詢時間方式https://www.cnblogs.com/ajaxa/p/9105107.html)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM