异步编程是一种编程模式。
JavaScript 是单线程的,只有一个线程可以执行代码。
这意味着,所有代码都只能在一个线程中按顺序执行,这很容易导致代码执行的阻塞。
代码的每一个语句都需要被执行,为了完成某个计算任务需要一定的执行时间。不同任务的执行时间之间的差别可能是数量级的。
根据执行时间的数量级(或长短)可以把计算任务粗略分为两种:
-
简单任务,执行时间的数量级较低(或执行时间较短)的计算任务。
-
复杂任务,执行时间的数量级较高(或执行时间较长)的计算任务。
线程阻塞,即在执行代码时,先执行了复杂任务,使后面的简单任务一直处于等待状态。
线程阻塞是 “不合理” 的,应该优先执行简单任务,再执行复杂任务。
线程阻塞的解决办法是对任务的执行顺序进行调整,即使用异步编程,即将可能是复杂任务的任务从当前的执行中抛出,在若干任务执行完后再执行被抛出的任务。
这种将计算任务从当前的执行中抛出,在其它若干任务执行完后再执行被抛出的任务的编程模式被称为异步编程。
主要参考资料:
- 《JavaScript 高级程序设计(第4版)》- P322(347/931)
消息队列
为了实