合作计划如何提高绩效

2024-05-12 02:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中看到了很多关于协同程序的讨论和文章。它们被认为是“微线程”,我听说它们提高了性能。在

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

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


Tags: 应用程序重点类型顺序文章消费者性能线程
2条回答

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

如果有几个线程,那么通常重叠的线程会胜出,而协程对性能没有任何好处。如果需要数千个线程,那么线程切换的开销将更大,在这种情况下,协同路由可能会带来好处,但是减少线程的数量可能会带来更大的好处。在

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

这是个好问题,它让我想起了David Beazley'sA Curious Course on Coroutines and Concurrency。David不仅在Python中解释了协程是如何工作的,而且还解释了它们真正在口袋里的用例。在

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

因此,就像@Duncan's answer所暗示的,在开销很重要的情况下(比如有很多线程),协同程序是性能上的胜利,但是协同程序不仅仅是性能。在

相关问题 更多 >