深入理解 GIL:如何写出高性能及线程安全的 Python 代码

深入理解 GIL:如何写出高性能及线程安全的 Python 代码

伯乐在线:http://python.jobbole.com/87743/  

翻译自:https://opensource.com/article/17/4/grok-gil

主要运行方式;

抢占式多任务处理

Python线程可以主动释放 GIL,也可以先发制人抓取 GIL 。

让我们回顾下 Python 是如何运行的。你的程序分两个阶段运行。首先,Python文本被编译成一个名为字节码的简单二进制格式。第二,Python解释器的主回路,一个名叫 pyeval_evalframeex() 的函数,流畅地读取字节码,逐个执行其中的指令。

当解释器通过字节码时,它会定期放弃GIL,而不需要经过正在执行代码的线程允许,这样其他线程便能运行:


默认情况下,检测间隔是1000 字节码。所有线程都运行相同的代码,并以相同的方式定期从他们的锁中抽出。在 Python 3 GIL 的实施更加复杂,检测间隔不是一个固定数目的字节码,而是15 毫秒。然而,对于你的代码,这些差异并不显著。

猜你喜欢

转载自blog.csdn.net/kllkzl3/article/details/80814985