我对线程和异步编程一般都比较新,但是我试图理解两者之间的区别,因为它与CPython中的GIL有关。
从我阅读的内容来看,我理解线程有自己的堆栈,这两个模型是不同的编程范例。但鉴于它们不能因为GIL并发运行,python线程下面是一种异步执行吗?我真的想更好地理解python解释器如何实现线程,特别是它如何确定何时一个线程阻塞而另一个线程可以执行?
答案 0 :(得分:1)
GIL只在执行python代码时起作用 - 调用在C中实现的函数,例如GIL不应该干扰afaik。此外,从磁盘下载文件或移动文件可以与python Threads同时工作。
来自Python Wiki:
的引用请注意,可能阻塞或长时间运行的操作(例如I / O,图像处理和NumPy数字运算)在GIL之外发生。因此,只有在多线程程序中花费大量时间在GIL内部,解释CPython字节码,才能使GIL成为瓶颈。
您可以查看multiprocessing模块,该模块允许您克服GIL并在计算机上使用多个Core。此外,还有一些工作正在使PyPy(另一种Python解释器)在某一天变得无GIL(只搜索STM / AME)。