持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
一、什么是线程
我对线程的的理解是这样的,线程是进程中能够并发执行的实体,是被独立调度和分派的基本单位。一个进程包含多个可并发执行的线程,这些线程共享进程所获得的主存空间和资源,可以为完成某一项任务而协同工作。线程表示进程中的一个控制点,执行一系列指令。线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。线程有时被称为轻量级进程,是程序执行流中最小的单位。
二、线程是由什么组成的?
(1)线程的组成
每个线程都有一个线程控制块,用于保存自己的私有信息。 线程主要由以下几个部分组成。 (1)线程标识符。它是唯一的。 (2)描述处理机状态信息的一组寄存器,包括通用寄存器,指令计数器,程序状态字寄存器等。 (3)栈指针,每个线程有用户栈和核心栈两个栈。 (4)一个私有存储区,存放现场保护信息和其他与该线程相关的统计信息。
(2)线程的状态
与进程相似,线程也有运行,就绪和阻塞三种基本状态。线程是一个动态的过程,它的状态转换可以在一定条件下实现。通常创建一个新进程时,该进程的一个线程(主线程)也被创建。
三、线程的属性
1、轻型实体
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源,比如,在每个线程中都应具有一个用于控制线程运行的线程控制块TCB,用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
2、独立调度和分派的基本单位
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小。
三、线程的种类及实现
基于两种不同的线程库可把线程的实现分成三类:内核级线程的实现,用户级线程的实现,以及混合式线程的实现。
(1)内核级线程
在OS中的所有进程,无论是系统进程还是用户进程,都是在操作系统内核的支持下运行的,是与内核紧密相关的。
优点: 内核级线程也有很多的优点,例如:
在多处理器系统中,内核能够同时调度同一进程中的多个线程并行执行。 如果进程中的一个线程被阻塞了,内核可以调度该进程中的其它线程占有处理器运行,也可以运行其它进程中的线程 内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小 内核本身也可以采用多线程技术,可以提高系统的执行速度和效率。
但内核级线程也是有缺点存在的,内核支持线程的主要缺点是:对于用户的线程而言,其模式切换的开销较大,在同一个进程中,从一个线程切换到另一个线程时,需要从用户态转为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的,系统开销较
(2)用户级线程
用户级线程是在用户空间中实现的。对线程的创建、撤消、同步与通信等功能,都无需内核的支持,即用户级线程是与内核无关的。在一个系统中的用户级线程的数目可以达到数百个至数千个。由于这些线程的任务控制块都是设置在用户空间,而线程所执行的操作也无需内核的帮助,因而内核完全不知道用户级线程的存在。
四、从调度、并发性、拥有资源和系统开销等方面来比较线程和进程
(1)调度性。
在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程,在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位;
(2)并发性。
在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使OS具有更好的并发性;
(3)拥有资源
无论是传统的操作系统,还是引入了线程的操作系统,进程始终是拥有资源的一个基本单位,而线程除了拥有一点在运行时必不可少的资源外,本身基本不拥有系统资源,但它可以访问其隶属进程的资源;
(4)开销
由于创建或撤销进程时,系统都要为之分配和回收资源,如内存空间等,进程切换时所要保存和设置的现场信息也要明显地多于线程,因此,操作系统在创建、撤消和切换进程时所付出的开销将显著地大于线程。