概念
线程
1)进程内细分出多个线程,线程可以实现一个进程内多个功能的并发
2)线程几乎不拥有系统资源,系统资源分配给进程,进程是资源分配的基本单位,线程是调度的基本单位
3)同进程下的线程共享地址空间和资源,并发不需要切换进程环境,降低了系统开销
4)每个线程都有一个线程ID、线程控制块(TCB),也有就绪、阻塞、运行三种基本状态
线程库
为程序员提供创建和管理线程的 API ,实现方式有以下两种:
1)只在用户态运行:在用户空间中提供一个没有内核支持的库。所有代码和数据结构都位于用户空间,调用函数只是调用本地函数
2)需要调用内核态:由操作系统直接支持的内核级的库。库内的代码和数据结构位于内核空间,调用函数会产生系统调用
实现方式
用户级线程

定义:
线程管理的工作由用户态中的线程库完成,内核意识不到线程的存在
优点:
1)用户级线程的切换不需要切换到核心态
2)线程管理的系统开销小,效率高
缺点:
1)当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高
2)多个线程不可在多核处理机上并行运行
内核级线程

定义:
线程的运行与管理由内核负责,线程的切换需要在核心态下完成
操作系统为每个内核级线程建立 TCB(线程控制块)进行管理
优点:
1)一个线程被阻塞后,别的线程还可以继续执行,并发能力强
2)多线程可在多核处理机上并行执行
缺点:
线程管理开销大
内核级线程——多线程模型
一对一模型

一个用户级线程映射到一个内核级线程
同内核级线程优缺点相同
多对一模型

多个用户级线程映射到一个内核级线程,一个进程只有一个线程
同用户级线程优缺点相同
多对多模型

n 用户级线程映射到 m 个内核级线程(n>=m)
优缺点:
克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞)
克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点
还拥有上述两种模型各自的优点
状态与转换

控制

线程通信:
同一进程中所有线程共享地址空间和全局变量,可直接进行读写操作
线程创建:
用户程序启动时,通常仅有一个“初始化线程”,用于创建新线程。创建新线程时,利用线程创建函数,并提供相应 TCB 参数。创建完成后返回一个 TID
线程终止:
终止线程执行终止操作
线程被终止后并不立即释放资源,只有当进程中的其他线程执行了分离函数后,被终止线程才与资源分离
被终止但尚未释放资源的线程仍可被其他线程调用,重新恢复运行
