线程的引入
在“进程的概念”一文中,提到了进程的两个基本属性:
(1)进程是一个可拥有资源的基本单位。包括PCB,地址空间,页表,物理内存上的数据和代码等。
(2)进程同时又是一个可独立调度和分派的基本单位。每个进程都有唯一的一个PCB,操作系统通过PCB感知进程的存在,进而调度进程。
为了使程序能够并发执行,操作系统必须:
(1)创建进程:为其分配资源和PCB等
(2)进程切换:需保留进程的上下文信息等
(3)销毁进程:撤销为进程分配的资源和PCB等
进程作为一个资源的拥有者,在创建,切换,销毁的过程中,操作系统花费的时间比较长。所以必须限制创建的进程数,且进程的切换不能够太过频繁。从而限制了程序的并发执行效率。
为了使程序能够更好的并发执行,操作系统将进程的而两个属性分离开。将拥有资源所有权的单位称为进程,而将调度和分派的单位称为线程。
线程的概念
线程是在进程内部运行的比进程更细化的执行流。线程在进程内部运行是指在进程的地址空间内运行。
在Linux中没有真正的线程,因为没有专门用来描述线程的结构体。它是用进程来模拟的,也就是用进程的PCB来描述线程的。如下图