浏览器与进程和线程

浏览器是多线程的(多进程)

  • 每创建了一个Tab页。就相当于一个独立的浏览器进程。(浏览器的优化,一些进程被合并了)
  • 浏览器能运行:是因为系统给它的进程分配了资源(cpu和内存)

浏览器有哪些进程

  • 浏览器主控进程(负责协调)
  • 第三方插件进程(使用插件时使用)
  • GPU进程浏览器(3D绘制)
  • 渲染进程(负责协调、脚本执行、事件处理)

为什么不是进程?

  • 一个崩溃影响整个进程。

4.最主要的是渲染进程:它是多线程的。

  1. GUI渲染线程:负责渲染解析html树,css树,构建dom树和渲染树。布局绘制。他与js线程是互斥的,js执行时,gui会被挂起,gui会等待js引擎为空时立即执行。
  2. JS引擎线程:负责处理js脚本。Js执行时间过长,会导致页面渲染不连贯。一个tab页无论如何只有一个js线程在执行js程序。
  3. 事件触发线程:归属于浏览器,而不是js引擎。用来控制循环(理解为浏览器忙不过来)。当JS引擎执行代码块如setTimeout(异步任务)时。线程会把事件添加到队列末尾,等待js引擎处理。
  4. 定时触发线程:计时器不是由js引擎计数的,添加到事件队列中,通过线程计时,当计时完毕后,添加到事件队列中。等待js引擎空闲时处理。
  5. 异步http请求。Xmlhttprequset连接后,会通过先开一个线程请求,检测到状态变更时,将回调放入事件队列里。由js引擎处理。

浏览器进程和浏览器内核的通信过程。

  1. 首先浏览器进程获取用户请求,首先需要获取页面内容(比如通过网络下载资源)。随后将该任务通过接口传给渲染进程,然后开始渲染。
  2. 渲染进程接的接口收到信息。交给渲染线程,然后开始渲染。
  3. 渲染线程开始渲染页面,这其间可能借助浏览器进程获取资源,GPU来帮助渲染。最后渲染进程把结果传给浏览器进程
  4. 浏览器进程收到结果并将结果绘制出来。

为什么互斥js引擎和gui渲染线程?

  • 防止元素数据前后不一样。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章