python解释器
cpython
C写的
ppython
python写的
jpython
java写的
GIL全局解释器锁
基于Cpython来研究全局解释器锁
GIL本质上是一个互斥锁
GIL为了阻止同一个进程内多个线程同时执行一个代码
单个进程下的多个线程无法实现并行,但能时间并发
主要是因为cpython的内存管理不是保证线程安全的
内存管理
垃圾回收机制
GIL的存在是为了保证线程安全的
注意:多个线程过来执行,一旦遇到IO操作,就会立马释放GIL解释器锁,交给下一个先进去的线程
多线程的作用
4个任务,每个任务10秒
计算密集型
单核
开启进程:
消耗资源大
4个进程:是40秒
开启线程:
消耗资源院校以进程
4个线程:是40秒
多核
开启进程:
并行,执行效率高
4个进程:是10秒
开启线程:
执行效率低
4个线程:是40秒
IO密集型
单核
开启进程:
消耗资源大
4个进程:是40秒
开启线程:
消耗资源院校以进程
4个线程:是40秒
多核
开启进程:
并行,执行效率低于多线程,因为遇见IO会立马切换CPU的执行权限
4个进程:是40秒+额外开启进程消耗的时间
开启线程:
并发执行,执行效率高于多进程
4个线程:是40秒
在计算密集型的情况下
使用多进程
IO密集型的情况下
使用多线程
高效执行,多个进程内有多个IO密集型的程序
使用多进程+多线程
死锁现象
A锁的钥匙在B锁内,B锁的钥匙在A锁内
注意:锁不能乱用
递归锁
用于解决死锁问题
RLock
相当于万能锁,可以提供给多个让去使用,但只能第一个人使用的时候,会对该锁做一个引用计数,只有引用计数为0的时候,才能真正释放让另一个人去使用.
信号量
互斥锁:同一时间只能让一个让使用
信号量:同一时间可以让多个让去使用
线程Q
线程队列
FIFO队列:先进先出
LIFO队列:后进先出
优先级队列:数字1~N,字母A~z,数字>字母>未知