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个灶台。电脑中有一项技术叫超线程,这个就和上面的灶台是一个意思了单核心单线程就是一个厨师一个灶台。单核心双线程就是一个厨师两个灶台。四核心四线程就是四个厨师四个灶台。