多线程的GIL锁
一、GIL锁简介
GIL锁
- Python自带的解释器是CPython
- CPython解释器的多线程实际上是一个假的多线程(在多核CPU中,只能利用一核,不能利用多核)
- 同一时刻只有一个线程再执行,为了保证同一时刻只有一个线程在执行,CPython解释器使用了全局解释器锁GIL(Global Intepreter Lock)
常见的Python解释器
- 1.Jyphon:用Java实现的Python解释器,不存在GIL锁
- 2.IronPython:用.net实现的Python解释器,不存在GIL锁
- 3.PyPy:用Python实现的Python解释器,存在GIL锁
GIL虽然是一个假的多线程,但是在处理一些IO操作(如文件读写和网络请求)时,也可以明显提升效率
二、GIL锁与Lock锁的区别
GIL锁无法保证共享资源的准确性
GIL锁 | Lock锁 |
---|---|
GIL可以保证全局同一时刻只有一个线程在执行,但是无法确保执行代码的原子性 | 保证多个线程访问全局变量时的数据准确性 |