Python GIL 全局解释器锁
1、GIL
CPython在解释器进程级别有一把锁,叫做GIL(Global Interpreter Lock),即全局解释器锁。
GIL保证CPython进程中,只有一个线程执行字节码。甚至是在多核CPU的情况下,也只允许同时只有一个CPU上运行该进程的一个线程。
CPython中:
IO密集型,某个线程阻塞,就会调度其他就绪线程CPU密集型,当前线程可能会连续的获得GIL,导致其它线程几乎无法使用CPU
在CPython中由于有GIL的存在,IO密集型,使用多线程较为合理;CPU密集型,使用多进程,要绕开GIL。
新版Python正在努力优化GIL的问题,但不是移除。移除GIL,会将此CPython单线程的执行效率。
Python中绝大多数的内置数据结构的读写操作都是原子操作。由于GIL的操作,Python的内置数据类型在多线程编程时就变成安全的了,但是实际上他们本身并不是线程安全类型。
如果在意GIL,可使用erlang Go等语言。
2、CPU密集型
查看下面两个示例,一个主线程单独运算和四个线程分别运算,时间竟然相差无几,验证了GIL锁的存在。
CPU密集型的运算,适合使用多进程。
import logging
import datetime
FORMAT = "%(asctime)s %(threadName)10s %(thread)8d %(message)s"
logging.basicConfig(level=logging.

Python的全局解释器锁(GIL)确保同一时间只有一个线程执行字节码,即使在多核环境下。对于CPU密集型任务,GIL可能导致线程切换频繁,限制了并行性能。在Python中,多线程更适合于I/O密集型任务,而多进程更适合CPU密集型任务,以绕过GIL的限制。尽管新版Python在优化GIL,但不会完全移除,以保持单线程执行效率。Python的内置数据结构在多线程环境中并非线程安全,若需要线程安全,可以考虑其他语言,如Java。
最低0.47元/天 解锁文章
985

被折叠的 条评论
为什么被折叠?



