进程和线程

这是一篇关于 进程和线程的区别 的文章,解答这道经典中的经典面试题。

进程和线程

先看英语,因为这些词汇毕竟都是译文,所以看英文比较能搞懂它原意。

进程 Process

线程 Thread

一个比喻

  • 线程就像一道铁轨或者是一条路,与之对应的,进程就像是一列火车或者是一辆车。
  • 线程是承载着任务的轻量级进程,而进程则是承载着多个线程的大型机器。

根本区别

  • 进程是系统资源的抽象,操作系统分配资源的基本单位,它是资源分配的最小单位,一个进程可以包含多个线程。

  • 线程是CPU资源的抽象,操作系统调度的基本单位,它是CPU调度的最小单位,一个线程在同一时间只能属于一个进程。

从属关系

  • 一个进程可以被多个线程同时运行,就像我们现在的下载器,一般都支持多线程下载。具体的体现的是,比如线程a运行进程的0-50%的内容,而线程b运行进程的50-100%的内容。

  • 某一个固定的时间点,一个线程只能被一个进程使用。当然,我可以0-1s运行进程a,1-2s运行进程b,这个就是分时复用的概念。

开销差异

进程的创建、销毁和切换的开销都远大于线程

进程的CPU利用率较低,因为上下文切换开销较大,而线程的CPU的利用率较高,上下文的切换速度快

拥有的资源

每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源。进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。