JavaScript异步操作和定时器原理

JavaScript异步操作和定时器原理

setTimeout(function(){

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

},1000)

while(true){

  //code

}

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容