事件循环(event loop)

为什么js是单线程

初学计算机语言的时候,无论是 C、C++还是 JAVA,都是支持多线程,偏偏 JavaScript是单线程,不支持多线程,这也跟 JavaScript的作用有关,都知道 JavaScript是主要运行在浏览器的脚本语言,最终操作的是页面的 DOM结构,当两个 JavaScript脚本同时修改页面的同一个 DOM节点时,浏览器该执行哪个呢?所以当时设计 JavaScript时,便要求当前修改操作完成后方可进行下一步修改操作。
 

浏览器是支持多进程

浏览器的每一个 tab页都是一个进程,有对应的内存占用空间、 CPU使用量以及进程ID。 新打开一个 tab页时,都会新建一个进程,所以就有一个 tab页对应一个进程的说法,但是这种说法又是错误的,因为浏览器有自己的优化机制,当我们打开多个空白的 tab页时,浏览器会将这多个空白页的进程合并为一个,从而减少了进程的数量个数。

浏览器内核

浏览器内核中有多个进程在同步工作,今天涉及到的浏览器的进程主要包括以下进程:

  • Browser 进程
  • Render 进程

Browser 进程

主进程,主要负责页面管理以及管理其他进程的创建和销毁等,常驻的线程有:

  • GUI渲染线程
  • JS引擎线程
  • 事件触发线程
  • 定时器触发线程
  • HTTP请求线程

GUI渲染线程

  • 主要负责页面的渲染,解析HTML、CSS,构建DOM树,布局和绘制等。
  • 当界面需要重绘或者由于某种操作引发回流时,将执行该线程。
  • 该线程与JS引擎线程互斥,当执行JS引擎线程时,GUI渲染会被挂起,当任务队列空闲时,JS引擎才会去执行GUI渲染。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值