跳到主要内容

进程和线程

进程

进程:Process,是一个具有一定功能的程序在一个数据集合上的一次动态执行过程。当用户点击运行应用程序时,就会产生一个进程,同一个程序可以产生多个进程。

  • 首先,系统会从硬盘读取应用程序文件,将其加载到内存中去,此时进程状态是“等待”;
  • 进程会等待系统调度的切换,当切换到自身时其状态就会变成"正在执行";之前运行的进程要么也变成等待状态,要么直接关闭;
  • 如果运行的进程需要系统资源,例如等待用户输入或者文件打开,那么状态会变成“已阻止”;
  • 进程被关闭,则系统会回收资源,删除进程或者状态变成“已终止”。

每个 CPU 核心任何时间内仅能运行一项进程。操作系统会基于多任务处理的机制交错执行多个进程,虽然 CPU 核心同一时间只能运行一个进程,但是多任务处理机制使得 CPU 核心能自由切换正在执行的多个进程。现代 CPU 多使用在多核配置中组合了两个或更多独立处理器,并且可以同时执行多个进程。另有一种称为同时多线程的技术(例如 Intel 的超线程技术)可以模拟多个进程或线程的同时执行。

大部分操作系统都会阻止进程之间直接通信,这是为了各个应用程序之间的安全性;进程之间如果要想进行通信,必须共享部分地址空间或者使用 IPC(interprocess communication)。

线程

线程:Thread,是操作系统能够运行和调度的最小单位,是进程中的一条执行流程。

进程虽然是程序运行的实例,但是在进程中真正运行的是线程,进程可以认为是线程的容器,为线程提供内存等系统资源;同一进程中的所有线程之间可以共享系统分配给进程的所有资源,但是各个线程也有自己的调用栈,自己的寄存器环境,自己的线程本地存储,线程之间运行需要协作同步,它们经常会共享数据。

协程

协程:Coroutines,是一种比线程更加轻量级的微线程,一个线程可以拥有多个协程。

多进程和多线程

  • 多进程之间一般不会相互影响,所以当一个进程崩溃时,其它进程完全不受影响,这样稳定性和安全性更好;
  • 多进程需要消耗更多的计算机系统资源;
  • 同一进程里的多个线程之间会相互影响,当某一个线程出错时,将会导致整个进程的崩溃;
  • 在 CPU 只有一个核心的时候,线程执行效率高于进程,但是多核 CPU 多进程的执行效率更高