python GIL 全局解释器锁

Python的GIL全局解释器锁限制了多线程在多核CPU上的并行执行,主要适用于IO密集型计算。GIL是CPython解释器的产物,导致CPU密集型任务在多线程环境下效率降低。使用multiprocessing库可以创建多进程,规避GIL限制,实现多核并行。进程间通信需借助Queue或共享内存,线程同步则依赖互斥锁等机制。互斥锁确保数据修改有序,而GIL确保同一时间只有一个线程运行。

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

 GIL的历史由来:

python中的GIL详解 - 可可的私房菜 - 博客园 (cnblogs.com)

总结:Python的多线程在多核CPU上,只对于IO密集型计算产生正面效果;而当有至少有一个CPU密集型线程存在,那么多线程效率会由于GIL而大幅下降。

个人理解:

GIL只是CPython的产物(参考:python解释器

GIL:创建python时只考虑到单核,为了解决多线程数据的完整性和同步状态的一把全局排他锁(一个防止多线程并发执行机器码的一个Mutex),几乎就相当于python是个单线程的程序。

由于GIL的存在,两个CPU密集型线程存在,实际上任意时间只有一个线程在跑,两个CPU密集型线程本质上其实是交替在跑。
但如果是多个IO密集型运算,在IO遇到阻塞时自动释放锁,这个时候线程切换去处理其他事情资源利用率上升。
但当至少存在一个CPU密集型线程,IO线程无法获得GIL锁,会一直处于等待状态。

改进方法:multiprocessing库
弥补thread库因为GIL而低效的缺陷。
使用多进程而不是多线程,每个进程都有自己独立的GIL,多进程间不会争抢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值