Python 多线程 和 多进程的CPU使用情况进行对比
Python 多线程 和 多进程的CPU使用情况进行对比
# 多进程
这是没跑多进程之前的使用情况
跑了2个多进程之后:
使用率 65%,
跑了4个多进程后:
CPU使用率:100%
————————————————–分割线————————————————————
多线程:
开启了4个线程,但使用率始终是百分之20多,因为在Python里,永远只有一个线程在工作
————————————————-分割线—————————————————————
java多线程:
java开启两个线程死循环的使用率:52.3%
java开启4个线程死循环的使用率:99%
————————————————————分割线—————————————————
看到这里,你好像发现了什么!!
1、由以上图可见,Python的线程是多么的鸡肋。
2、当然,也知道,线程是可以并行的(4个线程分配到其他物理核心,在CPU的眼里,只有线程),线程是可能(可以)被分配到不同的CPU核心去执行的。
3、另外,CPU有一个策略,有的CPU虽然核心多,但不一定所有核心都在同时工作,因为要考虑到节能、发热等,它会选择性的关掉一些核心
4、python 能通过 多进程 + 主线程 的 方式实现并行
目前CPU的主流结构:
N核N*2线程:例如 双核四线程,它是伪四核,不是真正意义上的四核,将每个物理核心模拟成4个逻辑核心
就好比如:有两条各宽4米的马路(双核),被用横线规划成了8条1米的马路,那么它可以同时跑8辆宽度1米的小车,但是宽4米的车还是只能跑2辆
N核N 线程: 例如 四核四线程
就好比如: 有四条各宽4米的马路,能跑16辆1米的小车,也能跑4辆4宽米的车。这就是为什么同代i3 比 i5 便宜的原因,在小数据量的并行时,
双核四线程是起作用的,但是大的数据量并行时,就比不上真四核了