Python与真正的并发线程
我已经看了好几个小时的资料,但还是搞不明白为什么Python的多线程会比单线程快。
这个问题其实和GIL有关。GIL是全局解释器锁的意思,如果有这个锁,并且在任何时候只有一个线程在运行,那多线程怎么会比单线程快呢?
我看到有些操作会释放GIL(比如写文件)。这是不是让多线程变得更快的原因呢?
还有关于greenlets,它们到底是怎么帮助实现并发的?到目前为止,我看到它们的作用就是在函数之间轻松切换,还有让yield函数变得不那么复杂。
补充一下:像Tornado这样的服务器是怎么处理成千上万的同时连接的呢?
1 个回答
8
你说得对——当 Python 在等待 C 代码执行的时候,GIL(全局解释器锁)会被释放,这样就能提高一些速度。但是,Python 一次只能执行一行代码。需要注意的是,这个 GIL 是 CPython 的一个实现细节,并不严格来说是 Python 语言本身的一部分。例如,Jython 和 IronPython 就没有 GIL,可以充分利用多处理器系统。
如果你想在 CPython 中实现真正的并发编程,应该考虑使用 multiprocessing,而不是线程(threading)。