【浏览器】浏览器进程

之前被问到,js引擎是单线程的话,那么是如何处理异步的请求的;后来发现自己对浏览器的进程、线程这块,还是没把握住...
所以记录一下补充巩固的内容

浏览器主要分为四大进程

  • 主进程

负责浏览器界面的显示与交互,各个页面的管理,创建和销毁其他进程。

  • 第三方插件进程

每种类型的插件对应一个进程,使用当前插件时,才会创建

  • GPU进程

最多只有一个,用于3D绘制

  • 渲染进程(我们常关注的一个过程)

浏览器渲染进程也是浏览器内核,内部是多线程的。主要负责页面渲染,脚本执行,事件处理等等

回到最初的那个问题,
Q: 单线程的js如何处理异步请求?
A: 浏览器的渲染进程是多线程的,有js引擎线程,也有专门的异步请求处理线程。

主要分为以下几个线程:

1.JS引擎线程

与GUI互斥;执行JS脚本,任务队列空的时候,才会执行GUI线程

2.GUI(图形用户界面)渲染线程

与JS引擎互斥,其中如果JS脚本执行时间过长的话,会导致页面渲染阻塞,渲染中断

3.HTTP异步处理线程

XMLHttpRequest 连接后,将一些异步回调加入到JS线程的尾部队列中

4.定时器处理线程

将计时(setTimeout、setInterval所在线程)结束的待执行任务加入到JS线程中

5.事件触发线程

用户点击等动作触发的事件方法,会被放到JS队列尾部

相关常见知识点

常见的宏任务:

  • setTimeout
  • setInterval
  • script脚本
  • I/O操作
  • UI渲染

常见的微任务:

  • new promise.then后面的方法体
  • mutation observer

你可能感兴趣的:(【浏览器】浏览器进程)