002-2线程(完)

线程

  1. 进程资源分配的基本单位
  2. 线程分派调度的基本单位
  3. 多线程: 操作系统在单个进程内支持多个并发执行路径的能力
  • 线程存储模型:
  1. 线程的优先级、执行状态
  2. 未运行时保存的线程上下文
  3. 执行栈
  4. 用于局部变量的一些静态存储空间
  5. 与进程内其他线程共享的内存和资源的访问

在这里插入图片描述

  • 线程的优点:
  1. 线程的创建终止切换所需时间远小于进程
    (1)同一进程中,线程的切换不会引起进程的切换
    (2)不同进程中,线程的切换会引起进程的切换
  2. 线程间的通信不需内核的介入,多个线程共享内存和文件,因此通信效率更高
  • 线程的状态:
  1. 线程的状态运行态就绪态阻塞态
  2. 挂起态对线程没有意义,仅适用于进程
  3. 如果一个进程被换出,由于所有线程都共享进程的地址空间,因此所有线程都须被换出
  4. 一个线程可以创建一个或多个线程,但不能创建进程

在这里插入图片描述

线程分类

  1. 分类: 用户级线程(ULT)(协程)内核级线程(KLT)

在这里插入图片描述

  • 用户级线程(协程):
  1. 用户级线程的管理由应用程序完成,无TCB
  2. 内核意识不到线程的存在,内核以进程为单位进行调度
  3. 描述此类线程的数据结构以及控制此类线程的原语在核外子系统中实现,在用户模式下运行
优点缺点
所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核模式特权,节省了两次状态转换的开销ULT执行一个系统调用时,不仅会阻塞这个线程,而且会阻塞进程中的其他线程
调度策略可因应用程序的不同而不同在纯ULT策略中,多线程应用程序不能利用多处理技术
ULT可在任何操作系统中运行,不需要对底层内核进行修改以支持ULT
  • 内核级线程:
  1. 内核完成进程及进程内的每个线程上下文的维护
  2. 调度是基于线程进行的
  3. 描述此类线程的数据结构以及控制此类线程的原语在核心子系统中实现
  • 混合方法:
  1. 线程的创建完全在用户空间中完成,线程的调度和同步也在用户程序中进行
  2. 一个应用程序的多个用户级线程会被映射到一些(小于等于用户级线程)内核级线程
  • 数量关系:

在这里插入图片描述

协程*

  1. 协程本质上是一种用户态的轻量级线程,拥有自己的寄存器上下文用户栈,切换时先将寄存器上下文和栈保存,等切换回来的时候再恢复
  2. 一个线程可以有多个协程,当⼀个协程执行完成后,可以选择主动让出,让另⼀个协程运行
  3. 协程并没有增加线程的数目,只是在线程的基础上通过时分复用的方式运行多个协程
  4. 协程的切换在用户态完成,切换的开销比线程从用户态到内核态的要小很多
  5. 协程的切换时机由用户决定,而线程的切换时机由操作系统决定
  • 为什么需要协程:
  1. 节约系统开销:协程的切换在用户态中完成,避免了系统级线程频繁切换造成的系统开销
  2. 节约内存:
    (1)系统内存的制约使得无法开启大量的线程实现高并发,在协程编程模式下,可以轻松有十几万协程
    (2)协程的栈内存很小,且动态变化,需要多少用多少,大概4~5K,而传统POSIX线程栈内存1~8M
  3. 开发效率:使用协程可以很方便的将一些很耗时的IO操作异步化
  4. 执行效率:同一线程内的多个协程,控制共享资源时不需要加锁,因此执行效率高很多

相关问题

  • 进程与线程的区别:*
  1. 进程是资源分配的基本单位,线程是调度的基本单位
  2. 拥有资源:进程是拥有系统资源的基本单位,具有独立的地址空间;线程不拥有系统资源,但同一进程的线程共享进程的系统资源
  3. 通信方面:同一进程中的线程共享全局变量,静态变量等数据,因此通信方便;进程间的通信需要借助操作系统提供的通信机制(IPC)完成
  4. 系统开销:线程的创建、切换和终止所需要的系统开销都要少于进程
  5. 可靠性:多进程程序鲁棒性更强,进程间不会相互影响;多线程程序中单个线程崩溃会导致进程中其他线程的崩溃

参考文献

  1. 协程和多路复用
  2. Goroutine(协程)为何能处理大并发?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值