【问题标题】:How do coroutines improve performance协程如何提高性能
【发布时间】:2011-09-28 07:00:05
【问题描述】:

我已经看到很多关于 python 中的协程的演讲和文章。它们被认为是“微线程”,我听说它们可以提高性能。

协程如何提高性能?从我目前所见,它们是单线程并按顺序执行。我同意从设计的角度来看,它们非常优雅,尤其是在生产者/消费者类型的应用程序中。

我想我没有抓住重点。有人可以帮忙解释一下吗?

【问题讨论】:

    标签: python coroutine


    【解决方案1】:

    协程并没有真正提高性能,除非在非常有限的意义上:多线程程序有一定的开销,协程提供了线程的一些好处,而不会产生这些开销。然而,当一个线程阻塞系统调用而其他线程可以运行时,大多数多线程应用程序(即使在具有 GIL 的 C-Python 中)受益于重叠:协程通常不会发生这种情况。

    如果您有几个线程,那么通常重叠会胜出,协程不会带来性能优势。如果您需要数千个线程,那么线程切换开销会更大,在这种情况下,协程可能会带来好处,但减少线程数量可能会带来更大的好处。

    协程的真正好处在于,对于生产者/消费者应用程序,它们使编码更加简单,因此编码速度更快。

    【讨论】:

      【解决方案2】:

      这是个好问题,它让我想起了David Beazley'sA Curious Course on Coroutines and Concurrency。 David 做得非常出色,不仅解释了协程在 Python 中的工作原理,还解释了协程真正存在的用例。

      他的文章似乎表明,性能优势来自于更少的开销来完成通常使用处理程序类的相同任务(参见his presentation 的幻灯片 51)。

      就像@Duncan's answer 所建议的那样,在开销很重要的情况下(例如拥有许多线程),协程可以提高性能,但协程不仅仅是性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 2021-06-13
        相关资源
        最近更新 更多