简介
本课程介绍了异步编程的概念。
简介
并发可以被定义为同时处理多个任务。即使在单核 CPU 的机器上,也可以并发运行多个进程或线程,但此时并非并行执行。并发通过让单个 CPU 一次只运行一个线程或进程,创造出一种并行执行的假象。
并行是指真正同时执行多个任务。只有在多核 CPU 的情况下才能实现真正的并行。
一台拥有四个核心的机器,同时运行一百个进程,既是并发也是并行,但主要体现为并发,因为同一时间只能处理四个任务。
async.io
async.io 指的是异步输入输出,是一种编程范式,通过单个线程或事件循环实现高并发。这一模型并非 Python 独有,在其他语言和框架中也有实现,其中最著名的是 JavaScript 的 NodeJS。
示例
为了理解 async.io 的概念,我们考虑一家餐厅里只有一位服务员的情况。突然,三位顾客——柯利、阿米尔和约翰同时到来。他们收到菜单后,各自需要不同时间决定点什么。假设柯利需要 5 分钟,阿米尔需要 10 分钟,约翰只需要 1 分钟。如果服务员先从阿米尔开始,耗时 10 分钟完成他的点单,接着服务柯利,花费 5 分钟记录订单,最后花 1 分钟处理约翰的点单,那么总共耗时 10 + 5 + 1 = 16 分钟完成所有点单。然而,在这个顺序中,约翰要等 15 分钟才轮到他,柯利等了 10 分钟,而阿米尔则无需等待。
现在假设服务员知道每位顾客所需决策时间,他可以先服务约翰,再服务阿米尔,最后服务柯利。这样每位顾客的等待时间都为 0 分钟。尽管实际上只有一位服务员,却创造出了三位专属服务员的假象。此外,完成全部点单所需的总时间仅为 10 分钟,远少于之前的 16 分钟。
有 JavaScript 背景的读者会发现 async.io 与 NodeJS 的工作方式非常相似。NodeJS 内部使用单线程事件循环来处理所有请求。
阅读提示
对于进阶读者,如果已经熟悉接下来几章的内容,可以选择跳过。后续章节将介绍使用 async.io 所需的基础知识。