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