美文网首页
JavaScript异步操作和定时器原理

JavaScript异步操作和定时器原理

作者: 玄天雪海 | 来源:发表于2018-04-11 15:50 被阅读0次

    JavaScript异步操作和定时器原理

    setTimeout(function(){

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

    },1000)

    while(true){

      //code

    }

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

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

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

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

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

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

    相关文章

      网友评论

          本文标题:JavaScript异步操作和定时器原理

          本文链接:https://www.haomeiwen.com/subject/uwyahftx.html