小白入门指南

思追(shaco)大约 2 分钟

异步编程

为什么需要异步?

首先我们将一台服务器看成是一个工厂,其中有固定数量的车间(cpu的核心),还有用于长期保存和短期保存作物的仓库(内存/硬盘)。在这个工厂有很多的生产线(进程),远远的超过工厂车间的数量。为了这些生产线可以最大化的利用这些车间进行生产操作,于是诞生了调度系统(操作系统),每个生产线有很多的工人(线程),他们协同完成一个任务。生产线上的每个工人都需要等待前面的工序完成后才能继续进行下一个工序,工人在等待状态时调度系统会将他的状态保存,恢复另外一个可以工作的工人的状态,让他进行工作(上下文切换)。

以上是同步编程模型对应的逻辑,那么在以上的工厂中有以下几个操作是非常昂贵的。

  1. 工厂创建一个新的工人
  2. 工人进入等待状态调度系统调度工人的状态切换时

这些原因驱使我们尽可能避免创建太多的线程,尽可能的避免操作系统发生上下文切换,而异步编程的目的就是消除阻塞,极大减少系统发生上下文切换

而异步方式生产则是另外一种处理方式,生产线上的每个工人可以同时进行各自的工序,甚至可以并行生产多个产品。当某个工序完成后,它会通知下一个工人开始进行下一个工序,这样整个生产过程就不存在等待状态的工人,那么这个工厂的工人数量基本上是固定的,也不需要发生上下文切换。

怎么使用异步编程