全局解释器锁(GIL)Cpython
来源:互联网 发布:warframe防火墙端口 编辑:程序博客网 时间:2024/06/11 20:03
本文介绍Cpython中的全局解释器锁(global interpreter lock)。(只有在Cpython中才有奥,Jpython中没有这一机制)
Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用。为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL。
GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下一条指令并不会互相影响。在调用任何Python C API之前,要先获得GIL
GIL缺点:多处理器退化为单处理器;优点:避免大量的加锁解锁操作
GIL的早期设计
Python支持多线程,而解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁。 于是有了GIL这把超级大锁,而当越来越
多的代码库开发者接受了这种设定后,他们开始大量依赖这种特性(即默认python内部对象是thread-safe的,无需在实现时考虑额
外的内存锁和同步操作)。慢慢的这种实现方式被发现是蛋疼且低效的。但当大家试图去拆分和去除GIL的时候,发现大量库代码开
发者已经重度依赖GIL而非常难以去除了。有多难?做个类比,像MySQL这样的“小项目”为了把Buffer Pool Mutex这把大锁拆分成
各个小锁也花了从5.5到5.6再到5.7多个大版为期近5年的时间,并且仍在继续。MySQL这个背后有公司支持且有固定开发团队的产
品走的如此艰难,那又更何况Python这样核心开发和代码贡献者高度社区化的团队呢?
GIL的影响
无论你启多少个线程,你有多少个cpu, Python在执行一个进程的时候会淡定的在同一时刻只允许一个线程运行。
所以,python是无法利用多核CPU实现多线程的。
这样,python对于计算密集型的任务开多线程的效率甚至不如串行(没有大量切换),但是,对于IO密集型的任务效率还是有显著提升
的。
转自:http://www.cnblogs.com/xuyaping/p/6825115.html
- 全局解释器锁(GIL)Cpython
- 初识全局解释器锁(GIL)
- python全局解释器锁(GIL)
- GIL全局解释器锁(转)
- GIL 全局解释器锁
- Python全局解释器锁(Global Interperter Lock, GIL)
- Python3之GIL全局解释器锁
- python 什么是全局解释器锁GIL
- python基础-GIL全局解释器锁
- Python高级特性:全局解释器锁GIL基本概念
- Python 多线程 多进程 全局解释器锁GIL join
- GIL解释器锁
- Python 中的 GIL(Global Interpreter Lock) 全局解释器锁是什么?
- GIL全局锁(Global Interpreter Lock)
- python GIL 全局锁
- 关于python全局性解释锁(GIL)
- 理解python GIL 全局锁
- 【python】关于python的全局解释锁GIL及线程问题
- mtk6570/6580/6737有关modem的总结
- ZOJ
- FZU 2229 Calculus Midterm
- Luogu 1169 棋盘制作:计数问题
- JS笔记
- 全局解释器锁(GIL)Cpython
- XListView+ViewPager
- UVa-11987 Almost union-find(带删除操作的并查集)
- 照片墙
- Elastic-Job 基础篇:基本信息及环境搭建
- 取反的最短路问题(Dijkstra)
- B-number[数位DP]
- 【华为机试】字符串加密
- 有向图强连通分量的Tarjan算法