Python 多線程 和 多進程的CPU使用情況進行對比
# 多進程

這是沒跑多進程之前的使用情況
跑了2個多進程之后:
使用率 65%,
跑了4個多進程后:
CPU使用率:100%
--------------------------------------------------分割線------------------------------------------------------------
多線程:
開啟了4個線程,但使用率始終是百分之20多,因為在Python里,永遠只有一個線程在工作
-------------------------------------------------分割線---------------------------------------------------------------
java多線程:
java開啟兩個線程死循環的使用率:52.3%
java開啟4個線程死循環的使用率:89.5%
------------------------------------------------------------分割線---------------------------------------------------
看到這里,你好像發現了什么!!
1、由以上圖可見,Python的線程是多么的雞肋。
2、當然,也知道,線程是可以並行的(4個線程分配到其他物理核心,在CPU的眼里,只有線程),線程是可能(可以)被分配到不同的CPU核心去執行的。
3、另外,CPU有一個策略,有的CPU雖然核心多,但不一定所有核心都在同時工作,因為要考慮到節能、發熱等,它會選擇性的關掉一些核心
4、python 能通過 多進程 + 主線程 的 方式實現並行
目前CPU的主流結構:
N核N*2線程:例如 雙核四線程,它是偽四核,不是真正意義上的四核,將每個物理核心模擬成2個邏輯核心
就好比如:有兩條各寬4米的馬路(雙核),被用橫線規划成了8條1米的馬路,那么它可以同時跑8輛寬度1米的小車,但是寬4米的車還是只能跑2輛
N核N 線程: 例如 四核四線程,真實的物理四核
就好比如: 有四條各寬4米的馬路,能跑16輛1米的小車,也能跑4輛4寬米的車。這就是為什么同代i3 比 i5 便宜的原因,在小數據量的並行時,
雙核四線程是起作用的,但是大的數據量並行時,就比不上真四核了
另外:
CPU的核心我們比喻成廚師做菜,單核心單線程就是給1個廚師配1個灶台,一次只能做1個菜。單核心雙線程就是1個廚師配2個灶台,一次能做2個菜,但是因為廚師一次性只能對一個灶台進行操作,除非某個菜不需要炒了放在那煮就行,這時候廚師才能去操作第二個灶台,所以實際上,1個廚師2個灶台的效率肯定不如2個廚師配2個灶台。電腦中有一項技術叫超線程,這個就和上面的灶台是一個意思了單核心單線程就是一個廚師一個灶台。單核心雙線程就是一個廚師兩個灶台。四核心四線程就是四個廚師四個灶台。