【发布时间】:2017-02-24 10:50:07
【问题描述】:
在我今天看到的几个 youtube 视频中,David Beazley 和 Yuri S. 都说异步比函数慢 2 倍。我不明白这一点。异步的全部意义在于并发,因此即使单个函数比单个协程更快,这几乎永远不会成为现实世界的情况。相反,您将同时运行许多协程,而不是一次运行一个函数,所以谁在乎一对一的函数是否更快?这是一个相关的基准吗?
【问题讨论】:
-
“异步的全部意义在于并发”。据我了解the whole async-await stuff aka. PEP 492 -- Coroutines with async and await syntax 是关于 coroutines 和 pseudo multitasking 一样,而不是像 multithreading 那样的并发,因此运行时没有并行加速多个协程,协程管理会有开销。加速来自协程的使用方式,并且不会因为执行多个协程而总是更好。
-
'加速来自协程的使用方式'。有没有一本书、指南、最佳实践等可以引导我完成这个过程?我在 PEP 492 的任何地方都找不到“速度”这个词。
-
我不知道,我个人是从计算机科学研究中知道的。有一些关于异步协程的相当“新鲜”的信息。事件循环 - 在 python、ruby、c 中...... - 关于 www 的想法。 F.e. this Chapter from 500 Lines or Less 或 David Beazleys Slides on Coroutines 和发电机。两者都只注意到让协同程序工作而其他人睡觉 - 在 I/O 上“等待” - 是一种协作的无线程多任务处理。加速是隐含的。
标签: python-3.x concurrency async-await python-asyncio