在Python并发编程这一章节中,会涉及到一些基础概念,希望有助于理解。
程序:指令的集合,咱们程序员基本每天都在写程序
进程:程序执行的过程,一个程序可以有多个进程(ps命令查看)。
线程:一个进程中可以有多个线程,每个线程并行执行不同的任务(ps -T)
协程:轻量级线程,可实现单线程多任务(未来潮流)
同步:下一件事的执行必须等待上一件事情执行完毕。
异步:下一件事的执行不必等待上一件事情执行完毕。
阻塞非阻塞
并发:只是看上去一起执行,比如多线程
并行:真正一起执行,不过当任务数大于CPU核心数时变成并发。
多线程、多进程经常涉及到CPU的核心问题,所以我们也有必要了解一下:
1.CPU一般指中央处理器
2.多核CPU:一个处理器上拥有多个一样功能的处理器核心,能够并行执行任务
3.多CPU多核:有多个处理器,每个处理又有多个核心
如何计算我们电脑的核心数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中有多少核心
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
下面讲讲令人难以忘怀的CPythonGIL锁:
GIL:全局解释锁,Python解释器会把所有线程都加上这个锁,从而确保任何时候只有一个线程执行,所以程序都只能在一个核中运行,不能发挥多核CPU的优势。
IO密集型任务 VS 计算密集型任务
IO密集型任务:是指磁盘IO、网络IO占主要的任务,计算量很小。比如请求网页、读写文件等。当然我们在Python中可以利用sleep达到IO密集型任务的目的。
计算密集型任务:是指CPU计算占主要的任务,CPU一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理),复杂的加减乘除等。