基本概念
背景:由于进程是资源的拥有者,在创建、撤消和切换过程中,系统必须付出较大的时空开销。所以,系统中所设置的进程,其数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发程度的进一步提高
进程中包含了多个线程,取代进程成为程序执行流之最小单位<br>
线程开销很小
进程间可以并发,线程间亦可以并发
线程被调用不会因此生成多个线程实体
进程仍然是<font color="#F44336">除CPU外</font>的系统资源的最小分配单元
线程控制块TCB
每个线程都可以用线程标识符和一组状态参数进行描述
① 寄存器状态 ② 堆栈 ③ 运行状态 <br>④ 优先级 ⑤ 专有存储器 ⑥ 信号屏蔽
线程的创建和终止
应用程序启动时,通常仅有一个线程在执行,该线程被称为“初始化线程”。它可根据需要再去创建若干个线程。
与进程对比
进程不再是调度的基本单位,被线程取代。
进程仍然是<font color="#F44336">除CPU外</font>的系统资源的最小分配单元
线程间如进程一样具有并发性
同一进程内线程间的并发无需切换环境,系统开销小
线程的属性
调度
是处理机调度的单位
多CPU计算机中,各个线程可以占用不同的CPU
线程具备线程ID和线程控制块TCB
线程也具有就绪、阻塞、运行三种基本状态
系统资源
线程几乎不拥有系统资源
统一进程的不同线程共享进程的资源
共享内存地址空间,同一进程的线程间通信无需OS干预
系统开销
同一进程间线程切换不会引起进程切换<br>
同一进程间线程切换开销很小<br>
不同进程间线程切换会引起进程切换
不同进程间切换开销很大<br>
线程实现方式<br>
用户级线程<br>User-Level Thread(ULT)<br>
线程由线程库实现,OS不能感知线程存在<br>线程是逻辑上的线程,管理由线程库完成<br>线程切换无需OS介入<br>
优势:管理不涉及CPU模式切换,开销很小<br>
劣势:无法处理阻塞问题,一阻塞全阻塞<br>并发度不高,无法多核并行<br>
内核级线程<br>Kernel-Level Thread(KLT)<br>
管理由OS完成,线程切换需要CPU状态切换
并发能力强,可以多核并行,不受阻塞影响
用户进程占用多个内核级线程,管理开销大
<font color="#F44336">内核级线程才是处理机调度的单位</font>