进程是操作系统中一个正在运行的程序,每个进程都有自己的地址空间、内存、文件描述符等资源。

线程是进程中的一个执行单元,是 cpu 调度的最小单元,共享进程的资源,但有自己的独立执行流。

二者的区别

  • 进程拥有独立的堆栈空间和数据段,需要分配独立的地址空间,开销大
  • 线程开销小,切换快,没进程安全,从通信机制上看,线程可以共享数据段

举例

  • 浏览器中一个 tab 就是一个进程,进程中某个线程崩了,整个进程就会崩,但是这不会影响其他的进程,因此进程之间相对独立
  • Nginx 或 Nodejs PM2 开启的多个 instance 是进程,每个 instance 之间不能共享内存数据
  • JS 中 WebWorker 是一个线程,它可以和和主线程共享内存数据,独立运行不阻塞 UI