同步与异步Python有何不同?( 三 )


你可能会想,为什么你不能运行 100 个同步 worker,那样,这两个服务器就会有相同的并发能力 。要注意,每个 worker 需要自己的 Python 解释器以及与之相关联的所有资源,再加上一份单独的应用程序拷贝及其资源 。你的服务器和应用程序的大小将决定你可以运行多少个 worker 实例,但通常这个数字不会很大 。另一方面,异步任务非常轻量,都运行在单个 worker 进程的上下文中,因此具有明显优势 。
综上所述,只有如下场景时,我们可以说异步可能比同步快:

  • 存在高负载(没有高负载,访问的高并发性就没有优势)
  • 任务是 I/O 绑定的(如果任务是 CPU 绑定的,那么超过 CPU 数目的并发并没有帮助)
  • 你查看单位时间内的平均请求处理数 。如果你查看单个请求的处理时间,你不会看到有很大差别,甚至异步可能更慢,因为异步有更多并发的任务在争夺 CPU 。
结论希望本文能解答异步代码的一些困惑和误解 。我希望你能记住以下两个关键点:
  • 异步应用程序只有在高负载下才会比同步应用程序做得更好
  • 多亏了 greenlets,即使你用一般方式写代码并使用 Flask 或 Django 之类的传统框架,也能从异步中受益 。
如果你想要了解更多关于异步系统如何工作的细节,可以查看 YouTube 上我在 PyCon 的演讲 Asynchronous Python for the Complete Beginner。
作者介绍:
Miguel Grinberg 是一名软件工程师、摄影师和电影制作人,住在爱尔兰的德罗赫拉 。你可以在 Facebook 、 google+ 、 LinkedIn 、 Github 和 Twitter 关注他 。
原文链接:
https://blog.miguelgrinberg.com/post/sync-vs-async-python-what-is-the-difference

【同步与异步Python有何不同?】


推荐阅读