在 web 编程中,经常有业务需要在处理请求时做异步操作,比如耗时太长的 IO 操作,等异步执行完成之后再结束请求返回 response 到 client,在这个过程中 client 和 server 一直保持着连接不释放,也就是当前请求在从 client 的角度看一直处于阻塞状态,直到请求结束。
之所以称之为异步,最重要的特征就是 server 可以继续处理其他 request 而不被阻塞。
不同语言在处理这种异步场景的方式是截然不同的,常见的处理策略有:消息共享(异步任务队列)、多线程多进程、event(linux signals,nodejs event loop)、协程 coroutine(返回 Future、Promise 代表程序执行的未来状态),其中 coroutine 是应用最广泛的,这也是今天此篇的主题。