JavaScript异步操作和定时器原理

2018-04-11  本文已影响0人  玄天雪海

JavaScript异步操作和定时器原理

setTimeout(function(){

  console.log("蚂蚁部落");

},1000)

while(true){

  //code

}

代码永远也不会输出字符串"蚂蚁部落",并不会和一些朋友想象的那样在会在一秒后输出。

之所以会出现上述现象,是因为JavaScript是单线程的,出现堵塞现象,下面就详细做一下分析。

一.JavaScript内核与浏览器内核:

JavaScript内核是单线程的,浏览器内核则是多线程的,下面介绍一下它们是如何相互配合工作的。

浏览器内核是多线程的,可以实现多个线程异步操作,这些线程包括JavaScript引擎线程,界面渲染线程和浏览器事件触发线程,这三个是常驻线程,还有像http请求这样的执行完就立马中止的线程。当然浏览器中的线程不仅仅就这几个,这里只是列举了几个与JavaScript相关的;这些线程会产生不同的异步事件。

比如使用setTimeout()定时器函数分派的任务,也可以来自浏览器内核其他线程,比如点击按钮触发一个事件的操作,ajax的http请求等。从代码角度看来任务实体就是各种回调函数,js引擎一直等待着任务队列中任务的到来。由于单线程关系,这些任务得进行排队,一个接着一个被引擎处理。

上一篇下一篇

猜你喜欢

热点阅读