线程的魔法:揭开现代操作系统并发执行的面纱


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:操作系统

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

目录

线程

线程概念

线程引入

传统进程的两个基本属性:

资源的拥有者:

调度单位

1.线程的组成

2.线程的状态

3.线程的管理

4.线程和进程的关系

5.引入线程的好处

线程的实现

1.在用户空间实现线程

在用户空间实现线程的优点

用户级线程的主要缺点

2.在内核空间实现线程

3.组合方式


线程

线程概念

现代操作系统中,进程作为资源拥有者,而调度和运行的属性赋予新的实体——线程

线程(Thread)是进程中实施调度和分派的基本单位。

线程引入

传统进程的两个基本属性:
资源的拥有者:

每个进程有自己的地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度

调度单位

进程是一个执行轨迹

以上两个属性构成进程并发执行的基础


系统管理传统进程必须完成的操作:

  • 创建进程
  • 撤消进程
  • 进程切换

缺点:负载重,时间空间开销大,限制并发度的提高

将进程的上述两个属性分开,线程因而产生。

引人进程的目的是为了使多个程序并发执行,以改善资源利用率、提高系统吞吐量。

线程的引人是为了减少程序并发执行时的所付出的时空开销。

1.线程的组成

  • 每个线程有一个thread结构,即线程控制块TCB用于保存自己私有的信息,主要由以下4个基本部分组成:

  • 线程必须在某个进程内执行
  • 一个进程可以包含一个线程或多个线程

2.线程的状态

与进程相似,线程也有若干种状态

  • 运行状态:线程在CPU上执行
  • 就绪状态:具备运行条件,一旦分到CPU,可以马上投入运行
  • 阻塞状态:线程在等待某个事件发生
  • 终止状态:线程完成任务后

线程的状态转换是在一定的条件下实现的

3.线程的管理

线程创建:调用thread_create创建新线程,建立thread结构,分配栈结构等,设置为就绪状态,放入就绪队列

线程终止:线程完成工作后,调用thread_exit终止自身

线程等待:调用thread wait等待指定线程终止此时该线程处于阻塞状态,指定线程终止时转为就绪态

线程让权:调用thread_yield放弃CPU,让给另外的线程运行

4.线程和进程的关系

  1. 一个进程可以有多个线程,但至少要有一个线程;而一个线程只能在一个进程的地址空间内活动。
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  3. 处理机分配给线程,即真正在处理机上运行的是线程。
  4. 线程在执行过程中需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
  • 由于线程拥有较少的资源,但又具有传统进程的许多特性,有的把线程叫做轻型进程(light weightprocess, LWP),
  • 把传统的进程叫做重型进程(heavy weightprocess,HWP),可把它看成拥有一个线程的进程。

5.引入线程的好处

①线程切换开销少。
②提高并发性。
③提升响应能力。
④利于充分发挥多处理器的效能。

线程的引用使系统设计变得复杂

无论是采用多进程还是一个进程的多线程来实现其并发性都是合理的,用哪一种结构更有效则取决于应用程序的要求。

线程的实现

 很多系统中已经实现线程,如Solaris2,Windows2000,Linux,Java语言

实现线程的方式主要有:

  • 在用户空间实现
  • 在核心空间实现
  • 组合方式:将用户级线程和核心级线程结合在一起,取长补短

1.在用户空间实现线程

把线程库整个地放在用户空间,内核对线程一无所知。

  

在用户空间实现线程的优点
  1.  线程切换速度很快。
  2. 调度算法可以是应用程序专用的。
  3. 用户级线程可以运行在任何操作系统上,包括不支持线程机制的操作系统。 
用户级线程的主要缺点
  1. 系统调用的阻塞问题
  2. 在单纯用户级线程方式中,多线程应用程序不具有多处理器的优点。

2.在内核空间实现线程

内核知道线程存在,并对它们实施管理。

  1. 在多处理器系统中,内核可以同时调度同一进程的多个线程
  2. 如果一个进程的某个线程阻塞了,内核可以调度同一个进程的另一个线程。
  • 优点:克服了用户级线程方式的主要缺陷;内核线程本身也可以是多线程的。
  • 主要缺点:控制转移开销大。

  

3.组合方式

把用户级线程和内核级线程两种方式结合在一起,吸收二者优点,克服各自不足

内核只知道内核级线程,也只对它们实施调度

实现组合方式有不同的模型:

  • 多对一模型
  • 一对一模型
  • 多对多模型

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法第二十六天-删除有序数组中的重复项Ⅱ

删除有序数组中的重复项 题目要求 解题思路 题目要求中提到原地修改,那么肯定需要一个指针指向当前即将放置元素的位置,需要另外一个指针向后遍历所有元素,所以[双指针]解法呼之欲出。 慢指针slow:指向当前元素放置的位置&…

B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】

导语: 详解B树与跳表的结构及区别,描述B树与跳表新增数据的过程,解释MySQL与Redis选择对应结构的原因。 mysql数据表里直接遍历这一行行数据,性能就是O(n),比较慢。为了加速查询,使用了B树来做索引&#x…

1572.矩阵对角线元素的和

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

ENVI必须会教程—Landsat卫星的加载与波段读取

实验4:读取Landsat影像 目的:了解Landsat影像读取方法,熟悉各波段及组合 过程: Landsat7影像: ①单波段影像加载:打开ENVI软件,点击文件,从文件打开准备好的L7数据,发…

MybatisPlus 学习笔记

1 . 快速入门 1 . 1 环境准备 导入数据库 导入基础项目 : 1.2.快速开始 比如我们要实现User表的CRUD,只需要下面几步: 引入MybatisPlus依赖 定义Mapper 1.2.1引入依赖 MybatisPlus提供了starter,实现了自动Mybatis以及MybatisPlus的自…

Axure原型设计项目效果 全国职业院校技能大赛物联网应用开发赛项项目原型设计题目

目录 前言 一、2022年任务书3效果图 二、2022年任务书5效果图 三、2022年国赛正式赛卷 四、2023年国赛第一套样题 五、2023年国赛第二套样题 六、2023年国赛第三套样题 七、2023年国赛第四套样题 八、2023年国赛第七套样题 九、2023年国赛正式赛题(第八套…

python单例模式应用之pymongo连接

文章目录 单例模式介绍模块简介安装简单的连接使用单例模式的连接单例类的实现配置的使用单例模式的测试 单例连接的调用 https://gitee.com/allen-huang/python 单例模式介绍 适用场景: 单例模式只允许创建一个对象,因此节省内存,加快对象访…

第二十二周周报

论文研读:Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB Image 粗读10篇文献。 通过图2 我可以知道这个论文大概实现的这个姿态估计效果的方法,首先是把图片输入到DetectNet网络,该网络…

面具安装LSP模块时提示 Unzip error错误的解决办法

面具(Magisk Delta)安装LSP模块时提示 Unzip error错误的解决办法 ​​ 如果前面的配置都正常的话,可能是LSP版本有问题重新去Github下载一个最新版的吧;我是这么解决的。 我安装1.91那个版本的LSP就是死活安装不上,下载了1.92的版本一次就…

OpenGrok代码服务器搭建,解决代码检索慢的问题

一、背景 在前一家公司,公司提供了OpenGrok服务器供大家检索查阅代码。但在新公司,大家都使用vscode或Sourse Insight,这就存在一些问题: 不能跳转或者跳转比较慢。 搜索查询速度慢,且结果展示不易查看。 这严重影…

给 spyter/all-spark-notebook 添加scala支持

spyter/all-spark-notebook默认没有安装scala notebook,需要手动添加。 你可以创建一个新的 Dockerfile,在其中添加你需要的配置和组件。以下是一个简单的例子: FROM jupyter/all-spark-notebook:x86_64-ubuntu-22.04 #冒号后可以是latest&a…

OpenHarmony教程指南-性能示例

介绍 本示例集成了条件渲染、动态加载以及HiDumper等场景来介绍如何提升应用性能。 效果预览 HiDumper使用说明: 1.点击性能示例主页的HiDumper按钮,进入HiDumper查看组件信息场景页。 1.点击HiDumper查看组件信息场景页的查看应用组件树进入场景页。…