异步的那些事(一)

2018-08-15  本文已影响0人  平凡的lily

单线程,event-loop,异步,promise,async await 这些名词在js中经常被提及。然而他们之间有什么关系呢,通过这段时间的学习,又有了进一步的了解,特用该篇文章记录一下。

 单线程指什么?就是指同一时间,只能做一件事,两段JS不能同时执行。                                                           

为什么会有单线程?避免DOM渲染冲突。                                                                                                                 

解决方案是什么?异步,eventl-loop。                                                                                                                      

那异步的解决方案是什么?如jquery  Defrred,Promise,async  await都是异步的解决方案。

后端的一些语言中可以起多个线程或者多个进程,给它们分配代码同时执行。可是在前端中只能有一个线程。为什么呢?首先,1. 浏览器需要渲染DOM;  2. JS可以修改DOM;3. JS执行的时候,浏览器DOM渲染会暂停; 4. 两段JS也不能同时执行(都修改DOM就冲突了),综上4条得知,前端执行JS职能是单线程,而且JS的执行和浏览器的渲染只能共用一个线程。(html5中有webworker支持多线程,但是也有个条件,不能访问DOM)

如果没有异步,JS执行的效率是非常慢的。比如遇见setTimeout、setInterval、ajax、addEventListener等这些异步的操作总不能一直卡在那,必须要有解决方案,那就是异步,保证等待的时间也能执行代码,异步和event-loop机制,保证JS能够比较高效的运行。

随着异步解决了单线程这个问题,异步本身也出现问题,                                                                                                                  

问题一:没按照书写方式执行,可读性差;                                                                                                                

问题二:callback中不容易模块化。

event-loop,即事件轮询,是JS实现异步的具体解决方案。同步代码,直接执行;异步函数先放在 异步队列 中;待同步函数执行完毕, 轮询执行 异步队列 的函数。(v8引擎做的,太底层了。。。)

后面的几篇将从deferred 开始,到promise,再到async await。

上一篇下一篇

猜你喜欢

热点阅读