【问题标题】:Python and truly concurrent threadsPython 和真正的并发线程
【发布时间】:2013-01-23 18:37:50
【问题描述】:

我已经阅读了几个小时,我完全可以弄清楚 python 多线程是如何比单线程更快的。

这个问题确实源于 GIL。如果有 GIL,而且单次真正运行的只有一个线程,那么多线程怎么比单线程快?

我读到通过一些操作 GIL 被释放(比如写入文件)。这就是让多线程更快的原因吗?

关于绿叶。这些对并发有什么帮助?到目前为止,我看到的所有目的都是在函数和不太复杂的屈服函数之间轻松切换。

编辑:像 Tornado 这样的服务器到底是如何同时处理数千个连接的?

【问题讨论】:

    标签: python multithreading concurrency gil greenlets


    【解决方案1】:

    你是对的 - 当 python 等待 C 代码执行时,GIL 被释放,这就是你如何获得一些加速的方法。但是一次只能执行一行python。请注意,这是一个 CPython(实现)细节,而不是严格地说是语言 python 本身的一部分。例如,Jython and IronPython have no GIL and can fully exploit multiprocessor systems

    如果您需要在 CPython 中进行真正的并发编程,您应该关注multiprocessing 而不是线程。

    【讨论】:

    • +1 以获得有关 GIL 的有用答案。我认为 GIL 只对 CPU 绑定的进程很重要。即使存在 GIL,IO 绑定进程仍然可以从线程(响应能力等)中受益。此外,OP 询问了 Tornado 的性能——答案是它使用非阻塞 IO,因此事件循环中不需要线程。
    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 2011-09-15
    • 2011-11-05
    • 1970-01-01
    • 2017-11-23
    • 2017-12-12
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多