进程与线程


计算机上运行的程序都会有进程,你可以打开windows的进程管理器来查看系统所有的进程信息,而linux可以使用top或者ps来查看所有的进程信息。

线程是比进程还要细分的一个单元,它在进程里面,一个进程下面可以有多个线程。

下表为进程和线程的主要区别:

项目 进程 线程
unit 分配系统资源(cpu时间、内存等)的基本单位 进程内的一个执行单元,CPU调度和分派的基本单位
地址空间 有独立的地址空间 和同进程内的其他线程共享地址空间
健壮性 很健壮,一个进程崩溃对其他进程没有影响 不健壮,相同进程内,一个线程崩溃(意味着进程崩溃),其他线程也会崩溃
调度(切换) 进程上下文切换,资源耗费大 轻量级进程切换,不用重新加载内存,一个进程内的线程切换要比不同进程内的线程切换快5-50倍
创建 拷贝父进程的地址空间,耗时较长 直接创建,比进程创建要快10-100倍
通信 进程间通信,用到IPC通信机制(共享内存、socket、信号、管道等) 可以直接和相同进程内的其他线程通信
编程容易度 多进程间耦合性较小,比较容易 线程间耦合度较大,共享全局变量,需要考虑关键变量的互斥操作