浏览器的多线程理解

本文介绍了浏览器的三个主要线程:JS引擎线程、GUI渲染线程和浏览器事件触发线程,强调了它们之间的互斥关系。同时,讨论了定时器setTimeout和setInterval的工作原理,指出它们如何在单线程JS引擎中处理事件,并通过一个例子解释了可能的浏览器假死现象。
摘要由CSDN通过智能技术生成

浏览器的线程介绍

通常一个浏览器至少有3个常驻线程:js引擎线程(处理js),GUI渲染线程(浏览器页面渲染),浏览器事件触发线程(事件触发控制)。
1.js引擎线程。由于js引擎是基于事件驱动的单线程,所以js引擎会一直等待着任务队列中任务的到来并处理。浏览器无论什么时候都只有一个线程来运行js程序
2.GUI渲染线程。当浏览器界面重绘或者回流时(重绘不一定触发回流,但是回流一定触发重绘,具体重绘和回流内容后面另专们研究,插个眼!!!),由于js可以操作dom,从而改变真个dom tree,所以他和js引擎线程是互斥的。也就是,当js引擎线程处于运行状态时,GUI线程就处于冻结状态,当GUI线程处于运行状态时,js引擎线程就处于冻结状态
3.浏览器事件触发线程,当一个事件被触发时,该线程会把这个事件添加到待处理队列的队尾,然后排队等待js引擎线程来处理

定时器setTimeout和setInterval

js引擎本身只能单线程运行,所以定时器需要由其他的外部线程来启动,所触发的事件也必须在队列中排队来等待js引擎的处理

setTimeOut(function(){
   while(1){}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值