简述进程和线程

143 阅读2分钟

一. 进程 是cpu资源分配的最小单位。比如播放器或者浏览器这就是小单位,他们之间的资源是独立的。所以进程之间的资源是独立的。

二. 线程 是cpu调度的最小单位。线程是共享一个资源仓库的。线程之间是没有独立仓库的。他们是服从调度安排向每个进程发放资源。

三. 面试题

  1. 在浏览器中新开一个窗口,这个tab页是进程还是线程?

    答案是:进程。进程资源是独立的。假如A页面加载失败,他是不会影响B页面的加载的。所以浏览器是一个多进程的应用。

  2. 浏览器窗口之间的通信方式?和区别?

  3. 浏览器的原理?

    浏览器在一个进程中,它是分很多线程的。也就是浏览器的各种引擎。

    1.GUI渲染引擎

    解析HTML,CSS构建DOM树。
    进行布局页面骨架,最后渲染绘制。
    他与JS引擎是互斥的,当执行JS引擎时,GUI引擎会被挂起(pending)。当任务队列空闲时,才会继续执行GUI渲染。(比如在开发时JS代码执行报错,导致页面卡住,白屏。)
    

    2.JS引擎

    处理JS,解析执行JS脚本。
    分配 处理 执行待执行的事件,也就是event队列。
    阻塞GUI渲染(在阻塞之前,其实dom树是先已经解析好被挂起的状态)
    

    3.定时器的触发引擎

    异步定时器处理与解析。setTimeout setInterval
    接受JS引擎分配的定时器任务 并计数
    处理完成后交给事件触发线程触发
    

    4.异步HTTP请求线程

    异步执行请求类处理:Promise、ajax等。
    接受JS引擎分配异步HTTP请求
    监听回调,交给事件触发线程触发
    

    5.事件触发引擎

    接受定时器、HTTP请求、用户操作
    将接收到的事件依次放到任务队列的队尾。最后还给JS引擎做处理。
    

    6.其他一些浏览器的引擎等。

  4. JS的执行原理?

    综合上面所说的,他其实就是接收dom、ajax、setTimeout各种事件。然后利用执行栈先进后出的原理依次交给JS来解析执行。最终渲染绘制我们的页面。

  5. 任务队列

    1. 宏任务 script、setTimeout、setIterval、I/O
    2. 微任务 Promise
    3. 宏任务优先级永远大于微任务。