(1)进程是资源分配的基本单位。进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。
而线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
(2)当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
(3)线程只由相关堆栈寄存器和线程控制块组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。
(4)进程切换时涉及到有关资源指针的保存以及地址空间的变化等问题;
线程切换,由于同一进程内的线程共享资源和地址空间,将不涉及资源信息的保存和地址变化问题。
而且,进程的调度与切换都是由操作系统内核完成,而线程则既可以由操作系统完成,也可以由用户程序进行。
(5)进程间的关系比较疏远。各个进程是在自己独有的地址空间内执行,不但寄存器和堆栈是独有的,动态数据堆、静态数据区和程序代码也相互独立。
而线程间的关系则要紧密得多,虽然各线程为保持自己的控制流而独有寄存器和堆栈,但由于两线程从属于同一进程,它们共享同一地址空间,所以动态数据堆、静态数据区和程序代码为各线程共享。
原文:https://www.cnblogs.com/reflecter/p/12040837.html