2

一般来说,我对线程和异步编程比较陌生,但我试图理解两者之间的区别,因为它与 CPython 中的 GIL 相关。

从我的阅读中,我了解到线程有自己的堆栈,这两种模型是不同的编程范式。但是考虑到它们因为 GIL 而不能同时运行,那么 python 线程是不是底层的一种异步执行呢?我真的很想更好地理解python解释器是如何实现线程的,特别是它如何确定一个线程何时阻塞而另一个线程何时可以执行?

4

1 回答 1

1

GIL 仅在执行 python 代码时发挥作用——调用用 C 实现的函数,例如,GIL 不应干扰 afaik。此外,从磁盘下载文件或移动文件可以与 python 线程同时工作。

引自Python Wiki

请注意,潜在的阻塞或长时间运行的操作(例如 I/O、图像处理和 NumPy 数字运算)发生在 GIL 之外。因此,只有在 GIL 中花费大量时间来解释 CPython 字节码的多线程程序中,GIL 才会成为瓶颈。

您可能会查看多处理模块,它允许您克服 GIL 并在机器上使用多个核心。此外,还有一些工作正在进行,以使替代 Python 解释器 PyPy 在某一天变得无 GIL(只需搜索 STM/AME)。

于 2013-04-08T11:40:52.837 回答