【问题标题】:python async speed compared to functionspython异步速度与函数相比
【发布时间】: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 是关于 coroutinespseudo multitasking 一样,而不是像 multithreading 那样的并发,因此运行时没有并行加速多个协程,协程管理会有开销。加速来自协程的使用方式,并且不会因为执行多个协程而总是更好。
  • '加速来自协程的使用方式'。有没有一本书、指南、最佳实践等可以引导我完成这个过程?我在 PEP 492 的任何地方都找不到“速度”这个词。
  • 我不知道,我个人是从计算机科学研究中知道的。有一些关于异步协程的相当“新鲜”的信息。事件循环 - 在 python、ruby、c 中...... - 关于 www 的想法。 F.e. this Chapter from 500 Lines or LessDavid Beazleys Slides on Coroutines 和发电机。两者都只注意到让协同程序工作而其他人睡觉 - 在 I/O 上“等待” - 是一种协作的无线程多任务处理。加速是隐含的。

标签: python-3.x concurrency async-await python-asyncio


【解决方案1】:

是的,单个await coro() 调用比func() 慢两倍。 但是整个基于异步的程序总体上可能(并且通常是)比基于线程的解决方案更快。

【讨论】:

  • 哦,好的。我不得不读了几遍,然后它就打动了我:由于任何给定的程序可以具有任意数量的函数和/或协程的任意长度,因此除非您有两个相同的程序,否则无法进行基准比较,一个只有功能,一个只有协程。可以做到,但我猜没有人认为有必要这样做?
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 2020-12-08
  • 2021-07-08
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
相关资源
最近更新 更多