当前位置: 首页 > news >正文

操作系统第九讲——线程的实现方式和多线程模型

用户级线程
1、用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)
2、用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
3、在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。“用户级线程”就是“从用户视角看能看到的线程”
4、优缺点
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机并行运行。

内核级线程
1、内核级线程的管理工作由操作系统内核来完成
2、线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成
3、操作系统会为每个内核级线程建立相应的TCB,通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”
4、优缺点:
优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程的管理成本高,开销大

在支持内核级线程的系统中,根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型

多线程模型
一对一模型:
一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。
优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在核处理机上并行执行。
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大
在这里插入图片描述
多对一模型:
多个用户级线程映射到一个内核级线程。
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行

操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位
在这里插入图片描述
多对多模型:
n用户及线程映射到m个内核级线程(n >= m)。每个用户进程对应m个内核级线程。
克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点

内核级线程才是处理机分配的单位。

内核级线程可以运行任意一个有映射关系的用户级线程代码,只有两个内核级线程中正在运行的代码逻辑都阻塞时,这个进程才会阻塞。
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 爬虫——第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
  • 神经网络电子书,神经网络入门书
  • 面试说:聊聊JavaScript中的数据类型
  • 深入理解计算机系统——第三章 Machine-Level Representation of Programs
  • C# ZXing.net解码测试(QRCode、DataMatrix、1D-Barcode一维码条码)
  • 新手轻松日赚300+搬砖项目详解
  • 信号分析与处理——对于傅里叶信号一些整理
  • 2023陕西师范大学择校分析
  • 数字藏品带给联盟链有哪些机会?
  • 搭建mybatis环境实现crud
  • ROS2入门学习
  • 【JavaSE】类和对象重点知识荟萃
  • JavaScript DOM——修改 HTML 内容
  • 【二叉树:3】线索二叉树
  • 深聊MySQL:如何优化数据导入?
  • 【css3】浏览器内核及其兼容性
  • js中forEach回调同异步问题
  • Laravel Telescope:优雅的应用调试工具
  • leetcode46 Permutation 排列组合
  • Redux 中间件分析
  • Spring Boot快速入门(一):Hello Spring Boot
  • underscore源码剖析之整体架构
  • Vue--数据传输
  • Vue小说阅读器(仿追书神器)
  • 基于 Babel 的 npm 包最小化设置
  • 盘点那些不知名却常用的 Git 操作
  • 如何在 Tornado 中实现 Middleware
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 一、python与pycharm的安装
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ###C语言程序设计-----C语言学习(6)#
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)Elastix图像配准:3D图像
  • (BFS)hdoj2377-Bus Pass
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (分布式缓存)Redis哨兵
  • (转)菜鸟学数据库(三)——存储过程
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***利用Ms05002溢出找“肉鸡
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Reactor简单使用教程
  • .net Signalr 使用笔记
  • .NET 反射 Reflect
  • .net 中viewstate的原理和使用
  • .php文件都打不开,打不开php文件怎么办
  • @31省区市高考时间表来了,祝考试成功
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @private @protected @public
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [Android View] 可绘制形状 (Shape Xml)
  • [android] 看博客学习hashCode()和equals()
  • [bzoj 3534][Sdoi2014] 重建