10.23GIL全局解释器锁,多线程作用,死锁,递归锁,信号量

python解释器

cpython

C写的

ppython

python写的

jpython

java写的

GIL全局解释器锁

基于Cpython来研究全局解释器锁
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队列:后进先出
优先级队列:数字1N,字母Az,数字>字母>未知

原文地址:https://www.cnblogs.com/793564949liu/p/11728530.html