线程概述
- 为了提升性能 需要提出一种实体:
- 实体之间可以并发执行
- 可以共享相同的地址空间
- 定义:进程当中的一条执行流程
- 重看进程:
- 进程就是管理资源的 通过线程来执行
- 可以说 进程由资源管理和线程组成
一个进程存在多个线程 各个线程共享进程提供的资源
- 线程的组织 :
- 独有:TCB (PC 堆栈 寄存器)
- 线程共享:代码段 数据段
- 线程的优点:
- 一个进程可以同时存在多个线程
- 各个线程可以并发执行
- 各个线程之间可以共享地址空间和文件资源
- 缺点:
- 一个线程崩溃,会导致其所属进程的所有线程崩溃
- 线程适用情况:
- 追求高性能,但网页不用线程 ,一个网页就是一个进程 。网页崩溃不会影响到别的网页打开。
现代操作系统支持 多进程 一个进程多线程
- 追求高性能,但网页不用线程 ,一个网页就是一个进程 。网页崩溃不会影响到别的网页打开。
- 进程与线程比较:
- 进程是资源分配的单位,线程是cpu调度单位
- 进程用有一个完整的资源平台 而线程只独享必不可少的资源,如 寄存器和栈
- 线程与进程的几种基本状态相同 相同的转换关系
- 线程能减少并发执行的时间和空间开销
- 线程创建时间比进程短(进程会创建资源管理,而线程创建时 进程已经管理好了某些资源)
- 终止时间段短(不需要管理资源释放)
- 同一进程内的线程切换比进程短(线程具有同一个地址空间 有同一个页表 所有信息可以重用 不需要切换页表 而进程需要切换 )
- 各个线程共享内存和文件管理, 可直接进行不通过内核的通信。
线程的实现
- 用户线程 :在用户空间实现 OS看不到 由一组用户级线程库函数来完成对线程的管理,包括创建 终止 同步 调度
- 由于线程的维护依靠线程库函数(相应进程),不需要OS,可用于不支持线程技术的多进程操作系统
- 每个进程有自己的TCB列表,用来跟踪记录它的各个线程的状态信息,TCB由线程库函数来维护
- 用户线程切换也是又线程库函数来完成,无需用户态/内核态切换,所以速度快
- 允许每个进程拥有自定义的线程调度算法
- 缺点:
- 如果一个线程发起系统调用而阻塞,则整个进程在等待
- 当线程运行后,除非它主动的交出cpu的使用权,否则其他线程无法运行。OS有中断的能力,线程库没有
- 由于时间片分配给进程,所以每个线程得到的时间较少,执行会慢。
内核线程:在内核中实现 OS看得到 TCB在内核
- 由内核来维护PCB和TCB
- 每次线程切换,OS都要切换状态 开销大
轻量级进程:在内核中实现 支持用户进程 (Solaris/linux)
内核支持的用户线程 一个进程可有多个轻量级进程,每个量级进程由一个单独的内核线程来支持。