操作系统-线程的概念(什么是线程 为什么线程共享进程资源 为什么线程切换开销低 引入线程的变化 线程属性 为啥要引入线程)

news2024/11/15 19:32:15

文章目录

  • 总览
  • 什么是线程,为什么要引入线程
  • 引入线程机制的变化
  • 线程的属性

总览

在这里插入图片描述

什么是线程,为什么要引入线程

此时qq进程内的视频文字聊天传输文件可以同时进行,如果进程内部是顺序执行的话,那么将某一时刻只能执行一个功能,显然不可能同时做这几件事情。
在这里插入图片描述
CPU此时轮流为各个线程服务(即线程并发)

在这里插入图片描述
除CPU资源外其他资源都是按进程来分配的,而CPU的使用权才会有根据线程来得到其使用权
在这里插入图片描述

引入线程机制的变化

注意线程并发不需要切换进程环境,开销降低

并发开销减少,同样一段时间内即进程切换的次数少了,自然系统花销少了(可以理解为线程切换只有不同进程的才会切换进程环境,并不像之前只有切换必须会切换进程环境了,此时切换单位是线程,每次切换不一定会切换进程环境。)

在这里插入图片描述

线程的属性

注意同一进程的不同线程共享进程的资源,切换同进程内的线程,系统开销很小

线程共享所在进程的资源是因为它们是同一进程的不同执行路径,自然地继承了进程的资源。被线程共享的进程资源如下

  • 代码段:所有线程执行的是相同的程序代码,这部分是只读的,因此可以安全地被多个线程共享。
  • 数据段:全局变量和静态变量是在所有线程之间共享的,这意味着任何一个线程对这些变量的修改都会影响到其他线程。
  • 堆区:动态分配的内存是共享的,任何线程都可以通过指针访问这块内存区域的数据。
  • 文件描述符、套接字和端口:打开的文件、网络连接等资源可以被所有线程访问,这对于I/O操作尤其重要。
  • 信号处理器:在Unix-like操作系统中,信号处理是在进程范围内设置的,因此所有线程共享同样的信号处理行为。
  • 环境变量:环境变量是所有线程共享的,它们通常包含有关系统配置的信息。
    此外,线程之间也有一些私有资源,如线程ID、寄存器组的值、线程的堆栈和错误返回码。这些资源对于线程的独立运行和上下文切换至关重要。

总的来说,线程共享进程资源的设计是为了提高资源利用率和程序的并发性能。通过共享内存空间和文件描述符等资源,线程可以高效地进行通信和协作,而不需要像进程间通信那样通过更复杂的IPC(进程间通信)机制。这种资源共享机制是多线程编程能够提高效率的关键因素之一。

切换线程时不需要切换共享的进程资源,是因为线程共享所在进程的资源。

线程是CPU调度的基本单位,而进程则是资源分配的基本单位。在同一个进程中的线程共享该进程的虚拟地址空间、打开的文件句柄、全局数据等资源。因此,当操作系统进行线程切换时,它不需要重新分配或切换这些资源,只需保存和恢复线程的执行上下文即可。具体来说:

  1. 虚拟地址空间:由于线程共享进程的虚拟地址空间,线程切换时不需要进行地址空间的转换。
  2. 文件句柄和全局数据:线程使用的是进程的资源,而不是拥有它们。这意味着在线程切换时,这些资源保持不变,线程可以直接访问。
  3. 上下文切换:线程切换主要涉及保存当前线程的执行状态(如寄存器值、程序计数器等)并加载下一个线程的状态,这是一个相对轻量级的操作。
  4. 性能影响:线程切换可能会影响TLB(Translation Lookaside Buffer)缓存的性能,但这通常比进程切换的影响要小,因为进程切换涉及到更多的资源重新分配。

总的来说,线程之间的资源共享机制使得线程切换比进程切换更加高效,因为它避免了重复的资源分配和释放操作。这种设计提高了多线程程序的运行效率,尤其是在需要频繁创建和销毁线程的场景中。
在这里插入图片描述

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

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

相关文章

C语言王道练习题第七周两题

第一题 Description 输入一个学生的学号,姓名,性别,用结构体存储,通过 scanf 读取后,然后再 通过 printf 打印输出 Input 学号,姓名,性别,例如输入 101 xiongda m Output 输出…

基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、运动物体追踪

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

开源项目Git Commit规范与ChangeLog

一,conventional commit(约定式提交) Conventional Commits 是一种用于给提交信息增加人机可读含义的规范。它提供了一组用于创建清晰的提交历史的简单规则。 1.1 作用 自动化生成 CHANGELOG基于提交类型,自动决定语义化的版本变更向项目相关合作开发…

数学与计算机:一场幽默风趣的盲约

数学与计算机:一场幽默风趣的盲约 Mathematics and Computers: A Humorous and Witty Blind Date 大家好,今天我们将要探讨一个比猫和键盘之间的深刻关系更有趣的话题——数学和计算机的浪漫邂逅。这可不是一场普通的相亲,而是一场逻辑与算法…

Vue+OpenLayers7入门到实战:快速搭建Vue+OpenLayers7地图脚手架项目。从零开始构建Vue项目并整合OpenLayers7.5.2

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章针对Vue初学者,对Vue不熟悉,甚至还不会Vue的入门学生读者。 本章会详细讲解从NodeJS环境到npm环境的各个步骤,再到使用vue-cli脚手架快速生成项目,以及添加OpenLayers7地图库依赖,编写简单的xyz高德地图显示…

基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp

基于Python的豆瓣电影评论的情感分析和聚类分析是一种用于探索电影评论数据的方法。 情感分析 情感分析旨在从文本中提取情感信息,并对其进行分类,如正面、负面或中性。在这里,我们使用了一个名为snownlp的Python库来进行情感分析。Snownlp是…

Excel:将截面数据转换成面板数据

原始截面数据如下: 步骤:数据——自表格/区域 点击确定,出现下图: 然后,在这个界面选择:“转换”——“逆透视列”下选择逆透视其他列。会出现面板数据形式。 然后,点击“主页”——关闭并上载即…

二叉搜索树操作题目:二叉搜索树中的搜索操作

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:二叉搜索树中的搜索操作 出处:700. 二叉搜索树中的搜索操作 难度 2 级 题目描述 要求 给定二叉搜索…

【java】6案例演示

关键字的定义和特点: 定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所有字母都为小写 保留字介绍 Java 保留字:现有 Java 版本尚未使用,但以后版本可…

Effective C++——关于重载赋值运算

令operator返回一个*this的引用 在重载,,*等运算符时&#xff0c;令其返回一个指向this的引用。 class MyClass {int* val; public:MyClass(int i) : val(new int(i)){}MyClass():val(new int(0)){}void print() {cout << *val << endl;}MyClass& operator(co…

【pytorch框架】使用 PyTorch 进行深度学习

1.Pytorch介绍 PyTorch 是由 Facebook 创建和发布的用于深度学习计算的 Python 库。它起源于早期的库 Torch 7&#xff0c;但完全重写。 它是两个最受欢迎的深度学习库之一。PyTorch 是一个完整的库&#xff0c;能够训练深度学习模型以及在推理模式下运行模型&#xff0c;并支…

Vue3 watch与watchEffect区别

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

Unity中UGUI在Mask剪裁粒子特效的实现

在Unity使用Mask是剪裁不了粒子特效的&#xff0c;之前有想过RenderTexture来实现&#xff0c;不过使用RenderTexture不适合用于很多个特效&#xff0c;因为RenderTexture依赖Camera的照射&#xff0c;如果在背包中每种道具都有不同的特效&#xff0c;那使用RenderTexture则需要…

255:vue+openlayers 加载tomtom地图(多种形式)

第255个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中添加tomtom地图,这里包含了多种形式,诸如中文标记、英文标记、白天地图、晚上地图、卫星影像图,高山海拔地形图等。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示…

基于SpringBoot + vue 的旅游景区网站系统设计与实现

目录 一、需求分析 二、技术分析 三、功能分析 四、数据设计 五、界面展示 六、资源获取 一、需求分析 旅游推荐网站是指提供旅游相关信息、服务和建议的在线平台。这些网站旨在帮助用户规划和安排旅行&#xff0c;提供目的地信息、酒店预订、机票预订、租车服务、旅行建…

v42.循环控制语句breakcontinue

1.break 跟在if语句、Switch语句之后 跳出循环 2.continue 例如打印0--20的质数程序。此循环为for循环&#xff1a; 初始化后判断条件&#xff0c;执行完代码块&#xff0c;i的值必定会递增!⚠️ 循环的是if语句和printf函数。如果满足if语句 &#xff0c;那么continue跳过当…

【视野提升】ChatGPT的系统是如何工作的?

类似ChatGPT的系统是如何工作的&#xff1f; 我们试图在下图中解释它是如何工作的。这个过程可以分为两个部分。 训练 要训练一个ChatGPT模型&#xff0c;有两个阶段&#xff1a; 预训练 在这个阶段&#xff0c;我们在大量互联网数据上训练一个GPT模型&#xff08;仅解码器转…

配置环境变量—使用cmd打开QQ

1.windowsR输入cmd打开命令窗口&#xff0c;输入qq点击回车&#xff0c;不能正常运行&#xff0c;因为没有配置环境变量 2.鼠标右键点击QQ&#xff0c;打开文件所在位置&#xff0c;找到QQ.exe文件 3.点击上方复制路径 开始配置环境变量。 1.选中此电脑&#xff0c;鼠标右击&a…

css中>>>、/deep/、::v-deep的作用和区别,element-ui自定义样式

文章目录 一、前言1.1、/deep/1.2、::v-deep1.3、>>> 二、区别三、总结四、最后 一、前言 1.1、/deep/ 在style经常用scoped属性实现组件的私有化时&#xff0c;要改变element-ui某个深层元素&#xff08;例如.el-input__inner&#xff09;或其他深层样式时&#xf…

C++ Qt day2

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <io…