理解python GIL 全局锁
来源:互联网 发布:量子计算处理器 知乎 编辑:程序博客网 时间:2024/05/22 02:04
众所周知,python中有全局解释器锁,由于全局解释器锁的存在,所以在同一时间内,python解释器只能运行一个线程的代码,这大大影响了python多线程的性能。
在python,使用的都是操作系统级别的线程,因此在linux中 python使用的是pthread 在windows下也是使用的Windows的原生线程来实现。
python GIL 之所以会影响多线程等性能,是应为在多线程的情况下,只有当线程获得了一个全局锁的时候,那么该线程的代码才能运行,而全局锁只有一个,所以使用python多线程,在同一时刻也只有一个线程在运行,因此在即使在多核的情况下也只能发挥出单核的性能。
既然python在同一时刻下只能运行一个线程的代码,那线程之间是如何调度的呢?
对于有io操作的线程,当一个线程在做io操作的时候,因为io操作不需要cpu,所以,这个时候,python会释放python全局锁,这样其他需要运行的线程就会使用该锁。
对于cpu密集型的线程,比如一个线程可能一直需要使用cpu做计算,那么python中会有一个执行指令的计数器,当一个线程执行了一定数量的指令时,该线程就会停止执行并让出当前的锁,这样其他的线程就可以执行代码了。
由上面可知,至少有两种情况python会做线程切换,一是一但有IO操作时,会有线程切换,二是当一个线程连续执行了一定数量的指令时,会出现线程切换。当然此处的线程切换不一定就一定会切换到其他线程执行,因为如果当前线程 优先级比较高的话,可能在让出锁以后,又继续获得锁,并优先执行。
linux下 python使用的是 pthread 和 有一个互斥量和一个 条件变量来实现全局锁功能。
下面是参考文档的下载地址该文档由python cookbook的作者编写,有很高的参考价值http://download.csdn.net/detail/tuxl_c_s_d_n/8677825
- 理解python GIL 全局锁
- python GIL 全局锁
- python全局解释器锁(GIL)
- Python的全局锁(GIL)问题
- python 什么是全局解释器锁GIL
- python基础-GIL全局解释器锁
- Python高级特性:全局解释器锁GIL基本概念
- Python 多线程 多进程 全局解释器锁GIL join
- Python全局解释器锁(Global Interperter Lock, GIL)
- GIL 全局解释器锁
- python下GIL锁
- 对于python全局性解释锁(GIL)的一些理解
- 【python】关于python的全局解释锁GIL及线程问题
- 初识全局解释器锁(GIL)
- 全局解释器锁(GIL)Cpython
- Python3之GIL全局解释器锁
- GIL全局锁(Global Interpreter Lock)
- GIL全局解释器锁(转)
- java-MongoDB存入文件时奇怪的异常
- ContentProvider与ContentResolver使用
- LSF系统
- oracle10g/11g 新特性八(SQL性能调优)
- 程序员技术练级攻略
- 理解python GIL 全局锁
- JAVA读取属性文件的几种方法
- 字符集与字符编码
- 远程无法访问tomcat
- ide
- poj 1733(带权并查集)
- TCL脚本读取命令行参数
- 【数据结构-队列】链式队列
- 这时我们需要ResourceBundle。http://blog.csdn.net/jdenght/article/details/908658