浏览器 进程 和 线程

0 阅读3分钟

🟩1. 什么是进程

进程(Process) 是程序的一次运行实例。 比如你打开一个浏览器,操作系统就会给它分配独立的内存空间、资源等,这就是一个进程。

进程的特点

  • 操作系统资源分配的基本单位
  • 每个进程都有自己独立的内存空间和资源
  • 进程之间默认相互隔离,互不影响。一个进程崩溃,通常不会直接影响别的进程

什么是线程

线程(Thread) 是进程中的一个执行单元。 一个进程里可以有一个线程,也可以有多个线程。

例如浏览器进程中通常有:

  • 渲染线程
  • JS 引擎线程
  • 网络请求线程
  • 定时器触发线程

线程的特点

  • CPU调度执行的基本单位
  • 线程依附于进程存在,不能单独存在
  • 同一个进程内的线程共享进程的内存空间资源
  • 线程切换开销远小于进程(因为共享内存,无需重新分配资源)

🟩3. 进程和线程的区别

性质---通信---开销 内存空间不同---稳定

(1)基本性质不同

  • 进程:资源分配的基本单位
  • 线程:CPU 调度的基本单位

(2)通信方式不同

  • 进程通信复杂,需通过 IPC 机制:

  • 管道、消息队列、共享内存、Socket 等

  • 线程通信简单,直接读写共享内存即可,但要注意线程安全

(3)开销不同

  • 进程创建、销毁、切换开销大
  • 线程更轻量,切换成本低

(4)内存空间不同

  • 进程之间内存独立、互不干扰
  • 同一进程内线程共享内存空间

(5)稳定性不同

  • 一个进程崩溃,一般不影响其他进程
  • 一个线程崩溃,通常会导致整个进程一起崩溃

🟩4. 举个简单例子

比如你打开微信和浏览器:

  • 微信是一个进程
  • 浏览器是一个进程

浏览器内部可能还有多个线程:

  • 一个线程负责页面渲染
  • 一个线程负责执行 JS
  • 一个线程负责网络请求

所以可以说:

  • 进程像一个工厂
  • 线程像工厂里的工人
  • 工厂提供场地、资源
  • 工人负责具体执行任务

🟩6. 多线程的问题

虽然线程共享数据更高效,但也带来问题:

  • 线程安全问题
  • 数据不一致
  • 死锁
  • 竞争条件

所以多线程编程通常要配合:

  • 信号量
  • 互斥量
  • 条件变量

🟩7. 面试精简回答版

进程是程序运行后的实例,是操作系统分配资源的基本单位;线程是进程中的执行单元,是 CPU 调度的基本单位。 一个进程可以包含多个线程,进程之间内存独立,线程之间共享同一进程的内存和资源。 进程更稳定,但创建和切换开销大;线程更轻量,执行效率高,但容易出现线程安全问题。