线程是进程内的一个执行流
我们知道在创建子进程时,只会创建子进程的进程控制块,父进程将自己资源的一部分直接给子进程,比如虚拟地址空间中的代码段和页表;现在有一个想法,就是类似创建子进程一样,给某一个进程创建多个进程控制块,同时指向同一个虚拟地址空间,共用一个页表
将进程的代码区分为多份,同时创建多个进程控制块指向同一虚拟地址;这些进程控制块分配着不同的系统资源,承担着不同的任务;通过虚拟地址空间+页表的方式对进程进行资源划分,使得单个进程的执行力度一定比之前的进程更细
这里多创建的进程其实就是线程,在Linux中由于线程和进程有许多重叠处,所以直接复用进程控制块来表示线程;线程是CPU调度的基本单位
有了线程之后,再一次解释什么是进程:承担分配系统资源的基本实体;之前的进程也是承担系统资源的基本实体,只不过内部只有一个执行流,这里的进程内部可以有多个执行流
线程在进程内部运行,线程在进程的虚拟地址空间内运行,拥有该进程的一部分资源
- Linux内核中没有真正意义上的线程,是使用进程控制块进行模拟的
- 在CPU角度,每个进程控制块都可以称之为轻量级进程
- Linux线程是CPU调度的基本单位;进程是承担分配系统资源的基本单位
- 进程用来申请资源,线程向进程索要资源
- 线程的好处:简单,维护成本降低