Python 全局解释器锁(GIL) 线程切换

本文详细解析了Python中的全局解释器锁(GIL),阐述了其在Cpython解释器中的作用机制,包括为何引入GIL、GIL的优缺点,以及如何通过多进程、更换解释器或混合编程来解决GIL带来的并发限制。同时,文章还介绍了Python线程的切换机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局解释器锁(GIL Global Interpreter Lock )

GIL锁与python语言并没有什么关系,仅仅是用C语言编写的cpython解释器中存在GIL锁。

在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他线程就必须等待该线程使用结束后才能继续使用

好处:

1.避免了大量的加锁减锁
2. 使数据更加安全

缺点:
多核处理器退化成单核处理器,只能并发不能并行。GIL只会影响严重依赖CPU的程序

解决方法:
1.用多进程代替多线程。每一个Python进程都有自己的Python 解释器和内存空间。但是进程相互之间是独立的,所以要解决进程之间的数据通信问题,可以用queue解决。

2.可以换一个Python解释器 比如 jpython。

3.python语言的特性就是可以作为胶水语言,所以在子线程部分可以不用python语言写,用其他语言写。

Python线程的切换:

1.对于IO操作的线程,当一个线程做IO操作时,IO操作不需要CPU,所以这个时候Python就会释放GIL锁,其他需要运行的线程就会使用该锁。

2.对于CPU密集型的线程,Python中会有一个执行指令的计数器,当一个线程执行了一定数量的指令时,该线程就会停止执行并让出当前的锁,但是如果当前线程的优先级很高,那么有可能在结束后会继续获取GIL锁继续运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值