Python异步调用的核心是多线程还是多进程?

5

我已经使用过像Twisted和Tornado这样的Python异步框架。此外,我知道Python已经通过asyncio模块实现了本机的异步调用。我认为(线程、多处理)和异步调用是不同的概念。但是不久前,我看了几个与线程和多处理相关的视频,似乎所有这些异步技术都是基于它们构建的。这是真的吗?


请在这里查看。 - rkrzr
2个回答

8
不,异步调用是构建程序的方法。threadingmultiprocessing可用于实现某些调用(但它们在Python异步框架中既不是必需的也不常见)。 并发不等于并行
在编程中,并发是独立执行进程的组合,而并行是同时执行(可能相关的)计算。
不要混淆程序文本的组织方式和它的实现方式(或执行方式)。完全相同的异步代码可以在单个线程、多个线程、多个进程中执行。可以轻松地在使用multiprocessing.Pool(进程)、multiprocessing.dummy.Pool(线程)或它们的gevent修补版本(单线程)的简单Pool代码之间切换。此外,如果只有一个CPU,则进程不一定会并行运行,但操作系统可以使它们并发运行。
如果您提到Python中的async关键字,则它表示生成器函数--只是创建可等待对象的多种方式之一。 asyncio不是消耗此类对象的唯一方法,例如有curio,它使用async函数,但后端与asyncio无关。 推荐视频:从基础开始的Python并发编程: LIVE!

4
通常情况下,异步是单线程的,实现异步绝对不需要使用多个线程或进程(这就是异步的全部意义)。但是,有些情况下人们可能希望将它们混合在一起,出于某种原因。
在这种模型[异步模型]中,任务相互交错,但在单个控制线程中执行。这比线程情况更简单,因为程序员始终知道当一个任务正在执行时,另一个任务不会执行。虽然在单处理器系统中,线程程序也会以交错模式执行,但使用线程的程序员仍应该按照图2而非图3的方式思考,以免在移植到多处理器系统时程序运行不正确。但是,单线程异步系统将始终以交错方式执行,即使在多处理器系统上也是如此。
来源:http://krondo.com/?p=1209

但在这种情况下,你如何进行一些CPU计算和I/O操作呢? - Viacheslav Kondratiuk
任务是交错的。(另外,我编辑了我的答案以包含一个参考。) - absolutelyNoWarranty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接