浏览器工做原理(三):js运行机制及Event Loop

参考:http://www.javashuo.com/article/p-apnenkgt-db.htmlsegmentfault

1、为何有Event Loop

Javascript设计之初就是一门单线程语言,Event Loop就是为了解决主线程不阻塞的问题。浏览器

2、Event Loop流程

一、js中有同步任务、异步任务两种数据结构

二、同步任务在JS引擎线程执行,造成执行栈异步

三、异步任务在已有异步操做结果符合触发条件时,进入任务队列(由事件触发线程管理)等待执行oop

四、执行栈中的任务运行完成后(JS引擎空闲),从任务队列中读取任务,加入到执行栈,并执行spa

3、图解流程、数据结构、与浏览器各线程之间关系

 4、定时器

一、定时器是独立线程控制:线程

定时触发是由定时器线程控制的,这是由于JavaScript引擎是单线程的, 若是处于阻塞线程状态就会影响记计时的准确,所以颇有必要单独开一个线程用来计时。设计

二、定时器实现流程blog

定时器实如今预先设定的时间后,将事件推入任务队列,等待执行栈执行。因为定时事件在推入任务队列中时,JS引擎线程正在执行其余任务,这时要定时事件要等待JS引擎线程空闲才能执行,就可能出现定时事件不能准时执行队列

三、对于0毫秒的定时:

W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算为4ms,但不排除不一样浏览器最小事件设置不一样。

即使时间间隔为0也须要进入任务队列等待JS引擎线程空闲的过程,执行栈中的任务仍是早于定时任务执行

相关文章
相关标签/搜索