事件循环****
浏览器进程:****
负责界面展示、用户交互,子进程管理。历览器内部会启动多个线程处理不同的任务。
网络进程:****
负责加载网络进程。
渲染进程:****
渲染进程启动后,会开启一个渲染主线程,主线程负责执行HTML,CSS,JS代码。
渲染主线程:****
1、解析HTML
2、解析CSS
3、计算样式
4、布局
5、处理图像
6、每秒把页面画60次
7、执行全局JS代码
8、执行事件处理函数
9、执行计数器的回调函数
………..
1、 在最开始的时候,渲染主线程会进入一个无线循环。
2、 在每一次循环会检查消息队列中是否有任务存在。如果有,就取出第一个任务执行,执行完第一个后进入下一次循环;如果没有,则进入休眠状态。
3、 其他所有线程(包括其他进程的线程)可以随时向消息队列增添任务。新任务会加到消息队列的末尾。在添加新任务时,如果主线程是休眠状态,则会将其唤醒以继续循环拿取任务。
整个过程,被称为事件循环(或者消息循环)
何为异步?
代码在执行过程中,会遇到一些无法立即执行的任务,比如:
及时完成后需要立即执行——setTimeout,setInterval
网络通信完成后需要执行的任务——XHR,Fetch
用户操作后需要执行的任务——addEventListener
如何理解 JS 的异步?****
什么叫全局队列?****
当嵌套超过5层时候,为什么最小间隔事件变成4ms .
任务有优先级吗?
任务没有优先级,在消息队列中的先进先出
消息队列是有优先级的。
目前的chrome的实现中,至少包含下面的队列:
延时队列:用于存放计时器达到后的回调任务,优先级【中】
交互队列:用于存放用户操作后产生的事件处理任务,优先级【高】
微队列:用户存放需要最快执行的任务,优先级【最高】****
****
输出结果为:54312
单线程是异步产生的原因
事件循环的异步的实现方式****