协同程序如何提高性能

Raj*_*j N 16 python coroutine

我一直在python中看到很多关于协同程序的讨论和文章.它们被认为是"微线程",我听说它们可以提高性能.

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

我想我错过了这一点.有人可以解释一下吗?

Dun*_*can 10

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

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

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


aar*_*acy 8

这是一个很好的问题,它让我想起了David Beazley 关于协同程序和并发的好奇课程.David不仅解释了协同程序在Python中的工作方式,而且还用于将它们放在口袋中的用例.

他的写作似乎表明,性能优势来自于完成相同任务的开销较少,而您通常使用处理程序类(参见演示文稿的幻灯片51 ).

就像@Duncan的回答所暗示的那样,开销很重要(比如拥有很多线程),协同程序是一个性能上的胜利,但协同程序不仅仅是性能.