1.同步异步的概念
同步与异步是js中代码执行顺序的两种方式
同步:
同步代码是按照代码的书写顺序从上到下依次执行,必须等待上一段代码执行完毕才能执行下一段,会阻塞后续代码的执行.
异步:
异步代码允许某段代码开始执行,然后在后台继续执行,同时执行其它代码而无需等待当前代码执行完成.可并发地执行多个任务不会阻塞后续代码的执行
2.js中如何实现异步
原因:js语言是单线程语言
js的单线程与其用途有关,js作为浏览器的脚本语言,运行在浏览器的渲染主线程上,而浏览器只有一个渲染主线程,所以说js是单线程语言
实现机制:js中通过事件循环机制来实现异步编程
事件循环机制理解:
在Chrome的源码中,它会开启一个永远不会结束的for循环,每次循环从消息队列中取出第一个任务执行,其他线程只需要在合适的时候将任务添加进队列末尾即可.
过去把消息队列简单的分为宏队列与微队列,这种说法已经无法满足复杂的浏览器环境,根据w3c官方的解释,每个任务有不同的类型,同一类型的任务必须在同一个队列当中,不同的任务可以属于不同的队列.任务没有优先级,但是不同任务队列有优先级,再一次事件循环中由浏览器自行决定去哪一个队列中的任务,但浏览器必须有一个微队列,微队列的任务一定具有最高优先级,必须优先调度执行.
在目前 chrome 的实现中,至少包含了下面的队列:
- 延时队列:用于存放计时器到达后的回调任务,优先级「中」
- 交互队列:用于存放用户操作后产生的事件处理任务,优先级「高」
- 微队列:用户存放需要最快执行的任务,优先级「最高」
3.js中如何处理异步
1.回调函数
2.事件监听(发布订阅模式)
3.promise
4.Generator
5.async await