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