Promise 本质上还是 callback 机制,js 在原有的 task 队列外新增了 promise 的 job 队列,每次 eventloop 时先看 job 队列,清空后再看 task 队列。
generator 是 js 中的协程,在一个函数内标注 yield,遇到该段代码时保存函数执行上下文,跳出当前函数执行接下来的函数,手动 next 时再恢复到上一个保存的函数执行现场。 这样在做 io 操作时发出了系统调用后就保存住现场继续把 cpu 释放给其他代码块,等到调用完成拷贝到应用空间时再回来执行。
async、await 是利用 promise 对 generator 进行了封装,实现了自动 next,实质上就是 io 操作完成后的 callback 执行了 next。
上述理解对吗?