Python和真正的并发线程

5

我已经阅读了几个小时,但我仍然无法完全理解Python多线程是如何比单线程更快的。

这个问题实际上源于GIL。如果有GIL,并且任何时候只有一个线程在运行,那么多线程怎么可能比单线程更快呢?

我读到过一些操作会释放GIL(例如写入文件)。这是使多线程更快的原因吗?

至于greenlet,它们如何帮助并发呢?到目前为止,我看到它们的作用就是方便函数之间的切换和减少复杂的yield函数。

编辑:像Tornado这样的服务器如何处理成千上万个同时连接的请求?

1个回答

8
您是正确的,当Python等待C代码执行时,GIL会释放,这就是您可以获得一些加速的原因。但是每次只能执行一行Python代码。请注意,这是CPython(实现)的细节,不严格属于Python语言本身。例如,Jython和IronPython没有GIL,可以充分利用多处理器系统
如果您需要在CPython中进行真正的并发编程,则应该考虑使用 multiprocessing而不是线程。

对于关于GIL的有帮助回答,点个赞。我认为,GIL只在CPU密集型进程中才很重要。即使存在GIL,IO密集型进程仍然可以从线程(响应等方面)中受益。此外,OP问及Tornado的性能——答案是它使用非阻塞IO,因此在事件循环中不需要线程。 - Raymond Hettinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接