【操作系统】进程管理——线程管理(个人笔记)

news2024/7/4 14:21:05

学习日期:2024.7.2

内容摘要:线程的概念、存在的意义、线程的属性,线程的实现方式,线程的状态与组织。


线程的概念

拿QQ来说,QQ既可以打视频电话,也可以在这同时进行文字聊天或传送文件,进程是程序的一次执行。但这些功能显然不可能是一个程序顺序处理一次就能实现的。

有的进程需要“同时”做很多事,而传统的进程只能串行地执行一系列程序,所以引入了线程来增加并发度。

传统的进程机制中,进程是程序执行流的最小单位,但在引入线程之后,线程成为了最小单位

线程是一个基本的CPU执行单元,是程序执行流的最小单位                                                                        在引入线程后,不仅是进程之间可以并发,进程内的各个线程之间也可以并发,进一步提升了系统的并发度,使得一个进程内可以同时处理更多的任务。(如QQ视频、文字聊天、文件传输等)而进程只作为除CPU之外的系统资源的分配单元。(如打印机、内存地址空间等资源都是以进程为单元分配)

传统的进程间并发,需要切换进程的运行环境,系统开销很大,但如果是同一进程的线程切换,则不需要切换进程环境,系统开销较小。

线程的属性

线程的实现方式

用户级线程(User-Level Thread,ULT)

历史背景:早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的。

很多编程语言提供了强大的线程库,程序员可以利用线程库实现线程的创建、销毁、调度等功能,操作系统事实上只“看得到”进程

1.线程的管理工作谁来完成?

用户级线程的管理本质上是由线程库负责的,并不是由操作系统负责的。(这也是“用户级线程”名字的由来)

2.线程切换是否要CPU变态?

线程切换并不需要请求操作系统的服务,也是由线程库管理的,在用户态下即可完成,不需要CPU切换到核心态。

优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

缺点:当某一个用户级线程被阻塞后,进程中其它的线程全部会被阻塞(进程进入阻塞态了),并发度并不高。同时多个线程不可在多核处理机上运行。(此时对操作系统来说,CPU分配的最小单位依然是进程)

内核级线程(Kernel-Level Thread,KLT)

由操作系统支持的线程,大多数现代操作系统都实现了内核级线程,如Windows,Linux等。

操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理(类似PCB)。“内核级线程”就是“操作系统能看得到的线程”

以一对一模型为例:

1.线程的管理工作谁来完成?

内核级线程的管理工作由操作系统内核完成。

2.线程切换是否要CPU变态?

线程的调度、切换等工作都由内核负责,因此内核级线程的切换必然需要CPU在核心态下才能完成。

优点:当一个线程被阻塞后,别的线程还能继续执行,并发能力强。多线程可在多核处理机上并发执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多线程模型

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

一对一模型

一个用户级线程映射到一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。

优点:同“内核级线程”部分的介绍,当一个线程被阻塞后,别的线程还能继续执行,并发能力强。多线程可在多核处理机上并发执行。

缺点:同“内核级线程”部分的介绍,一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多对一模型

多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

本质上退化成为了用户级线程的实现方式,虽然操作系统“看得见”线程,但只看得见内核级的线程,又因为每个进程只被分配一个内核级线程,所以本质上还是ULT的线程实现方式。

对比用户级线程实现方式,事实上就是在线程库和进程之间增加了一个“内核级线程”作为处理机分配的单位而已。

优缺点同用户级线程的优缺点。

多对多模型

n个用户级线程映射到m个内核级线程,且n≥m,每个用户进程对应m个内核级进程。

克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点(n≥m,相对一对一来说能减少内核级线程数量)。

可以这么理解:

用户级线程是“代码逻辑”的载体。

内核级线程是“运行机会”的载体。(“内核级线程”才是处理机分配的单位

一段“代码逻辑”只有获得了“运行机会”才能被CPU执行。

内核级线程中可以运行任意一个有映射关系的用户级线程代码,只有所有的内核级线程中正在运行的代码逻辑都被阻塞时,我们才说这个进程进入了阻塞状态。(进程全部的线程都进入了阻塞状态)

线程的状态与组织

线程有运行、阻塞、就绪三个状态,状态转换非常类似进程。

线程的组织与控制——基于TCB(类似进程的PCB)


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1886376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基于ssm+jsp 二手交易平台网站

1商家能模块 商家首页,在商家首页页面可以查看个人中心、商品分类管理、商品信息管理、订单信息管理、订单配送管理信息,如图1所示。 图1商家首页界面图 个人中心,用户通过个人中心可以查看用户名、用户姓名、头像、性别、手机号码、邮箱等信…

MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

数据库设计作业——《网上书店系统》数据库设计 一、功能需求 普通用户:可以进行最基础的登陆操作,可浏览图书、按类别查询图书、查看 图书的详细信息,还可以注册成为会员。会员:需要填写详细信息(真实姓名、性别、手…

移动端 UI 风格简约而不凡

移动端 UI 风格简约而不凡

vue 中使用element-ui实现锚点定位表单

效果图&#xff1a; 代码&#xff1a; html代码&#xff1a; <div class"content-left"><el-tabs :tab-position"left" tab-click"goAnchor"><el-tab-pane v-for"(item,index) in anchorNameList"v-anchor-scroll:ke…

HTTP2.0如何优化HTTP1.1

目录 HTTP1.1什么缺点 如何解决头部压缩 静态字典 动态字典 如何解决队头阻塞 Stream 排序 服务器主动推送资源 HTTP1.1什么缺点 队头阻塞问题 同一连接只能在完成一个 HTTP 事务&#xff08;请求和响应&#xff09;后&#xff0c;才能处理下一个事务&#xff1b;(…

力扣每日一题 7/2 数学、数论、数组/双指针

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 3115.质数的最大距离【中等】 题目&#xff1a; 给你一个整数数组 nums。…

视频字幕提取在线工具有哪些?总结5个字幕提取工具

平时在沉浸式追剧的时候&#xff0c;我们常常都会被影视剧中的各种金句爆梗而逗得开怀大笑~而真正要用到时候却总是一片头脑空白。其实要记住它们最好的办法便是将其提取留档下来&#xff0c;每次有需要的时候打开就能一下子回顾到~ 今天就来带大家盘一盘视频字幕提取的软件好…

[C++]——同步异步日志系统(1)

同步异步日志系统 一、项⽬介绍二、开发环境三、核心技术四、环境搭建五、日志系统介绍5.1 为什么需要日志系统5.2 日志系统技术实现5.2.1 同步写日志5.2.2 异步写日志 日志系统&#xff1a; 日志&#xff1a;程序在运行过程中&#xff0c;用来记录程序运行状态信息。 作用&…

图片转pdf,图片转pdf在线转换,在线图片转pdf,图片转pdf格式怎么弄

在数字化时代&#xff0c;图片和PDF文件成为了我们日常生活中不可或缺的元素。有时候&#xff0c;我们需要将图片转换成PDF格式以便更好地分享、存储或打印。那么&#xff0c;图片格式怎么转换成PDF呢&#xff1f;本文将为您详细介绍简单实用的转换方法。 方法一、使用pdf转换软…

Python容器 之 字典--字典的常用操作方法

1.增加和修改 字典[键] 值 键 存在, 修改 键 不存在, 添加 # 定义非空字典, 姓名, 年龄, 身高, 性别 my_dict {"name": "小明", "age": 18, "height": 1.78, "isMen": True} print(my_dict) # {name: 小明, age: 18, h…

【知识】DGL中graph默认的稀疏矩阵格式和coo格式不对的坑

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 先给结论 源码解读 代码验证 网上没找到相关的讨论&#xff0c;因此只能从源码上一步步查。 先给结论 对于自己使用dgl.graph接口创建的图&am…

【HTML入门】列表与表格

文章目录 前言一、列表与表格是什么&#xff1f;列表表格 二、使用标签列表标签表格标签 三、组合情况列表的组合表格的组合 四、示例代码总结 好的&#xff0c;以下是一个关于HTML列表与表格的文章示例&#xff1a; 前言 随着网页开发的普及&#xff0c;HTML成为了构建网页的…

LVS FILTER UNUSED OPTION

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 过滤一些版图与spice网表对不上的器件。 一般后端遇不到这个问题,因为通常是需要写到网表中的decap没有写出来造成的,如下图。

来不及啦!怎样找回删除的照片,2个解决方案【安卓通用】

一不小心手滑&#xff0c;手机里那些珍贵的照片竟然全都被删了&#xff01;现在心急如焚&#xff0c;怎样找回删除的照片呢&#xff1f;别担心&#xff0c;小编我这就为你带来2个快速有效的解决方案&#xff0c;让你在分分钟找回那些失去的照片&#xff01;快来学习一下吧&…

Java语法系列 小白入门参考资料 方法

方法的概念及使用 方法概念 方法出现的原因 在编程中&#xff0c;某段功能的代码可能频繁使用到&#xff0c;如果在每个位置都重新实现一遍&#xff0c;会&#xff1a; 1. 使程序变得繁琐 2. 开发效率低下&#xff0c;做了大量重复性的工作 3. 不利于维护&#xff0c;需要…

自动驾驶水泥搅拌车在梁场的应用(下)

自动驾驶水泥搅拌车在梁场的应用&#xff08;下&#xff09; 北京渡众机器人科技有限公司的自动驾驶水泥搅拌车在梁场&#xff08;也称为预制梁场&#xff09;的应用可以带来多方面的优势和效益&#xff1a; 1. 自动化搅拌和运输 在梁场中&#xff0c;通常需要大量的混凝土搅…

探索大型语言模型自动评估 LLM 输出长句准确性的方法

LLM现在能够自动评估较长文本中的事实真实性 源码地址&#xff1a;https://github.com/google-deepmind/long-form-factuality 论文地址&#xff1a;https://arxiv.org/pdf/2403.18802.pdf 这篇论文是关于谷歌DeepMind的&#xff0c;提出了新的数据集、评估方法和衡量标准&am…

零基础学习MySQL---MySQL入门

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、什么是数据库 问&#xff1a;存储数据用文件就可以了&#xff0c;为什么还要弄个数据库呢&#xff1f; 这就不得不提…

收集了很久的全网好用的磁力搜索站列表分享

之前找资源的时候&#xff0c;收集了一波国内外大部分主流的磁力链接搜索站点。每一个站可能都有对应的优缺点&#xff0c;多试试&#xff0c;就能知道自己要哪个了。 全网好用的磁力链接 大部分的时候&#xff0c;我们用国内的就可以了&#xff0c;速度块&#xff0c;而且不…

Free Pascal语言基础学习:定义变量、数据类型、循环语句、case语句、条件判断、with语句、运算符

Pascal是一种结构化编程语言&#xff0c;而Free Pascal作为其现代编译器&#xff0c;不仅支持跨多种操作系统和处理器架构&#xff0c;还提供了高效的内存使用和函数重载等先进功能。Free Pascal继承了Pascal语言的核心特性&#xff0c;同时进行了扩展和优化&#xff0c;使其成…