只要是单进程不论是单还是多线程,无论是单核还是多核CPU,都是每次执行一个线程,前者是串行,后者是并发。
只要是多进程就可以在多核CPU上并行,当然如果在单核CPU还是并发。
为何不取消GIL?
CPU bound:计算密集,CPU一直运作。使用多进程。
IO bound:输入输出密集,CPU大部分时间是闲置,比如内存IO,网络IO,磁盘IO,sleep函数。使用单进程多线程与多进程单线程相比更省资源。
补充1
计算机有五部分:
控制器、运算器,对应CPU
存储器,对应内存条与硬盘
输入设备,对应键盘、鼠标、触控板、摄像头、麦克风等
输出设备,对应显示器、打印机、投影仪等
补充2
CPU寄存器速度:1ns
CPU缓存器速度:10ns
内存条速度:100ns
磁盘速度:10ms=1e7ns
https://blog.csdn.net/cl05300629/article/details/92798887
平滑的代码过渡
threading与multiprocessing几乎一致
不论多线程还是单线程:
单进程——一个解释器
多进程——多个解释器
每个解释器对应一个GIL
不同的任务不同的解决方案
对比
接下来我想做这18种的对比,有点多,有人可以和我一起吗?嘿嘿嘿。
对比三种情况:CPU密集、IO密集、混合密集
每种情况又有六种类型:
单进程单线程
单进程多线程
多进程单线程(每个进程为单线程)
多进程多线程(每个进程为多线程)
线程池
进程池