异步编程方案总结(思维导图)

250 阅读2分钟

引言

众所周知,Javascript是“单线程”工作的,即一次只能完成一个任务。如果有多个任务需要执行,就必须排队,等待前面的任务完成后,再依次执行下一个任务。但是这种单线程工作模式有时也会存在一些弊端,比如当遇到一个非常耗时的任务时会出现假死,执行效率降低。为了解决这一问题,Javascript语言将任务的执行模式分成两种:同步和异步。本文先从Javascript为什么是单线程讲起,整理了两种执行模式(同步模式和异步模式)的区别,最后总结了目前主流的异步编程解决方案,并整理出异步编程相关的思维导图。

JS为什么是单线程?

Javascript作为浏览器脚本语言,其主要用途是与用户互动,以及操作DOM,所以这一特性决定了它只能是单线程的,否则会带来很复杂的同步问题。比如,假定一段JS代码同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器如果同时执行应该以哪个线程为准,这显然会造成冲突和矛盾。

JS的两种执行模式

Javascript的单线程工作模式存在一些弊端,比如当遇到一个非常耗时的任务时会出现假死,执行效率降低。为了解决这一问题,Javascript语言将任务的执行模式分成两种:同步和异步。

  • 同步模式

    同步模式是指代码中的任务依次执行,后一个任务必须等待前一个任务结束才能开始执行。 缺点:若遇到某一任务执行时间过长,会出现阻塞。

  • 异步模式

    异步模式是指对于耗时任务,开启过后就立即执行下一个任务(进入"任务队列"(task queue)),耗时任务 的后续逻辑,会通过回调函数的方式定义。通过EventLoop监听调用栈和任务队列,当调用栈结束(同步代码 执行完毕),EventLoop会从任务队列中将任务压入依次到调用栈中依次执行。同步和异步的模式如下图所示:

异步编程思维导图

下面是整理的异步编程相关的思维导图~