[英]Does each thread run it's own interpreter loop?(CPython)
当我们运行一个线程应用程序时,它看起来很容易。 CPython 解释器运行一条一条的字节码指令并立即执行。 但是,如果我们从第一个线程开始另一个线程,它是否有自己的循环消耗字节码,并且它们共享一些常见的 memory 用于同步(GIL 等),或者以某种方式从第一个(主)线程委托指令循环第二个? 事情我无法弄清楚第二个线程如何获取指令,如果需要不断解释它需要执行什么。 我知道由于 GIL,它不会并行运行,但是关于解释指令的问题,它是否发生在两个线程中?
import threading
def thread_function(value):
print(value)
if __name__ == "__main__":
x = threading.Thread(target=thread_function, args=(1,))
x.start()
在哪个线程print(value)
将被解释(主线程或子线程)?
我认为阅读 CPython 代码会有所帮助。
您将在ceval.c中找到所需的所有详细信息
我对 CPython 也很陌生。 我将尝试分享我的理解。
您可以想象,一旦您调用 threading.Thread,用于创建线程 object 及其目标 function 的字节码将被添加到当前指令列表中。
当解释器处理这个字节码时,它会注意到创建了一个新线程(这一步我不太确定。你可以检查 ceval.py 和线程模块来验证)。
现在您有两个字节码列表供 python 解释器使用。
它会根据自己的规则轮流(即每个线程每100条指令然后决定是否切换,特殊信号处理或其他)
希望它能解答你的疑惑。
寻求深刻的理解,不把任何事情视为理所当然,这很好!
希望您能愉快地探索 cpython。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.