CSAPP-2.2-线程

线程简介

  • 线程:一条线程指的是***进程中***一个单一顺序的控制流,是***最小调度单元***。
    传统操作系统中,每个进程只有一个地址空间和一个控制线程
  • 需要多线程的原因:
    1. 许多应用同时发生多种活动,某些活动随着时间推移会被阻塞,可以把应用程序分解准并行运行的多个顺序线程。
    2. 线程比进程更加轻量,创建撤销快。
    3. 线程能够提高I/O密集型的进程的性能,而不能提高CPU密集型的。

经典线程模型

进程模型基于两个概念:资源分组处理与执行
线程模型:资源分组是进程的工作,在CPU上被调度执行是线程的工作。
线程特点
  1. 所有线程的地址空间相同
  2. 共享所有的全局变量
每个进程中的内容每个线程的内容
地址空间程序计数器
全局变量寄存器
打开的文件堆栈
子进程状态
即将发生的定时器
信号与信号处理程序
账户信息
线程状态
  1. 运行
  2. 阻塞
  3. 就绪
  4. 终止
  • 线程状态之间的转换和进程状态转换一样。
  • 所有的线程都是平等的。

POSIX线程包

线程调用描述
pthread_create创建新的线程
pthread_exit结束调用的线程
phread_join等待特定的线程退出
pthread_yield自动放弃CPU,来运行另一个线程
pthread_attr_init创建并且初始化一个线程的属性结构
pthread_attr_destroy删除一个线程的属性结构

用户级线程:把线程放在用户空间中。

  • 内核角度:按照***单线程进程***管理。
  • 每个进程维护一个***线程表***,记录线程的属性。
  • 每个进程里的线程表由***运行时系统***管理

优点:

  1. 线程切换迅速。
  2. 允许每个进程自定义调度算法
  3. 可以在不支持线程的操作系统上实现。

缺点:

  1. 线程阻塞,不知道多线程的存在,因此同一进程中只能有一个线程运行。
  2. 线程没有时钟中断,不能自动让出CPU。

内核级线程

  • 通过系统调用来创建或者撤销一个线程。
  • 内核的***线程表TCB***保存了线程的信息。
  • 所有能够阻塞线程的调用都采用系统调用的形式实现。

内核回收线程:标志为不可允许,不删除内核数据。

混合线程:用户级线程与某些或者全部的内核线程多路复用。

  • 内核识别内核级线程,对其调度。
  • 内核级线程有一个用户线程的集合,可以轮流使用。

多路复用:多个用户线程对应一个内核线程。

调度程序激活机制:改进内核级线程速度慢

功能:模拟内核线程的功能,避免态的转换,提高效率。

弹出式线程:当消息到达后,创建一个处理消息的进程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值