Python 多線程 和 多進程的CPU使用狀況進行對比java
# 多進程
這是沒跑多進程以前的使用狀況python
跑了2個多進程以後:多線程
使用率 65%,線程
跑了4個多進程後:3d
CPU使用率:100%code
--------------------------------------------------分割線------------------------------------------------------------blog
多線程:進程
開啓了4個線程,但使用率始終是百分之20多,由於在Python裏,永遠只有一個線程在工做多進程
-------------------------------------------------分割線---------------------------------------------------------------class
java多線程:
java開啓兩個線程死循環的使用率:52.3%
java開啓4個線程死循環的使用率:89.5%
------------------------------------------------------------分割線---------------------------------------------------
看到這裏,你好像發現了什麼!!
一、由以上圖可見,Python的線程是多麼的雞肋。
二、固然,也知道,線程是能夠並行的(4個線程分配到其餘物理核心,在CPU的眼裏,只有線程),線程是可能(能夠)被分配到不一樣的CPU核心去執行的。
三、另外,CPU有一個策略,有的CPU雖然核心多,但不必定全部核心都在同時工做,由於要考慮到節能、發熱等,它會選擇性的關掉一些核心
四、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個竈臺。電腦中有一項技術叫超線程,這個就和上面的竈臺是一個意思了單核心單線程就是一個廚師一個竈臺。單核心雙線程就是一個廚師兩個竈臺。四核心四線程就是四個廚師四個竈臺。