一、异步的概念
异步的概念很广泛,下面是百度百科上面摘抄下来的异步定义:
异步:一种通讯方式,对设备需求简单。我们的PC机提供的标准通信接口都是异步的。
异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。
异步的另外一种含义是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。
但此处需要明确的是:异步与多线程与并行不是同一个概念.
这一系列《异步之路》中,我们只在我们JS编程领域中谈论“异步”。
二、JS中的异步概念
从我开始了解JS开始,就一直有听说过那么几个词:Ajax、Promise,回调函数,单线程,异步操作等等。这一系列东西之间感觉冥冥中都有一定的联系,但是我之前从没有去真正的搞清楚搞懂他们这哥几个,此次我想通过《异步之路》的撰写过程来梳理这方面的知识点,来翻越JS学习过程中的这一座大山。
我在网上查了一些资料,得到了几句私以为十分精辟的话,此处摘抄下来:
(1)异步代码的书写顺序与执行顺序不同。(这并不是异步的定义。另外「书写顺序与执行顺序不同的代码」不一定是异步代码) ——知乎–方应杭
(2)举个例子更好说明,
假如你打电话去书店订书, 老板说我查查, 你不挂电话在等待, 老板把查到的结果告诉你, 这是同步, 如果老板说我查查, 回头告诉你, 你把电话挂了, 这是异步——知乎–马里奥
我们从上面这两位仁兄所总结的话语中再加之其他一些知识可以得出那么几个点:
(1)同步代码是严格按照代码前后顺序来执行的,逻辑是从代码块上到下一行一行去实现。也就是说同步就是一定要等任务执行完了,得到结果,才执行下一个任务;而异步则不同,代码都是从上到下一行一行被编译器读取编译,但是异步代码其中的逻辑则不一定是按照代码字面意思一步一步去实现的,很可能是我先声明我要做一个任务,然后我去完成了其他几个任务后我才又回来完成了这个任务,也就是说异步就是不等