1.GIL概述
GIL ( Global Interperter Lock ) 称作全局解释器锁。首先需要明确一点,我们所讲的 GIL 并不是 Python 语言的特性,它是在实现 Python 解释器时引用的一个概念。GIL 只在CPython 解释器上存在。
Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.对于io密集型任务,python的多线程起到作用,但对于cpu密集型任务,python的多线程几乎占不到任何优势,还有可能因为争夺资源而变慢。
解决办法就是多进程和下面的协程(协程也只是单CPU,但是能减小切换代价提升性能)。
2.GIL优缺点
优点:
GIL 是 Python 解释层面的锁,即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程解决解释器中多个线程的竞争资源问题。
缺点:
但是这仅仅是对io密集型任务,python的多线程起到作用,但对于cpu密集型任务,python的多线程几乎占不到任何优势,还有可能因为争夺资源而变慢。
3.如何改善 GIL 产生的问题
因为 GIL 锁是解释器层面的锁,无法去除 GIL 锁在执行程序时带来的问题。只能去改善。
- 更换更高版本的解释器,比如3.6,从3.2版本开始,Python对解释做了优化,但并不理想;
- 更换解释器,比如 Jython,但是由于比较小众,支持的模块较少,导致开发效率降低;
- Python为了解决程序使用多核的问题,使用多进程替代多线程 ,或者是用协程(协程也只是但cpu,但是能减少切换代价提升性能)。
网友评论