协程如何提高性能

16

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

协程如何提高性能?目前我所看到的,它们是单线程的,按顺序执行的。从设计角度来看,特别是在生产者/消费者类型的应用程序中,它们相当优雅。

我想我可能没有理解重点。有人能帮忙解释一下吗?

2个回答

11

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

如果您只有几个线程,通常重叠会胜出,协程不会带来性能提升。如果您需要成千上万的线程,则线程切换开销将更大,在这种情况下协程可能会带来一些好处,但减少线程数量可能会带来更大的好处。

协程真正的优点在于,对于生产者/消费者应用程序,它们使编码变得更简单,因此更快速。


8

这是一个好问题,它让我想起了David Beazley关于协程和并发性的课程。David不仅在Python中解释了协程的工作原理,还介绍了使用协程的场景。

他的写作似乎表明,性能提升来自于完成通常使用处理程序类(见他的演示文稿第51页)的相同任务时具有更少的开销。

因此,像@Duncan的答案所建议的那样,在开销很重要的情况下(如有许多线程),协程是性能优势,但协程不仅仅是为了性能。


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