【OSTEP】并发:线程与多线程

" A flow of control within a process that consists of a PC, a register set and a stack space"

 本章将介绍为单个运行进程提供的新抽象 —— 线程 (thread) 

  • 线程是 \textrm{CPU} 调度的一个基本单位(basic unit of CPU scheduling)
  • 一个单独的线程至少有自己的寄存器状态,通常还有自己的栈。

" 在同一进程中可以创建多个线程,并共享代码、地址空间和进程的操作资源 "

❓ 思考:那么问题来了,线程和多线程的区别是什么?

这里有一个经典观点就是:一个程序只有一个执行点,但多线程有多个执行点。

 就让荀彧 (不是苟或!!!) 来给大家举个栗子:

  • 线程:一个程序计数器,用来存放要执行的指令。
  • 多线程:多个程序计数器,每个都用于取指令和执行。

多线程每个线程都类似于独立的线程,所以没有什么太大的区别,它们只有一点区别 ——

 (线程之间共享地址空间,从而能够访问相同的数据)

💡 区别:多线程 共享 地址空间  。因此,单个线程的状态与进程状态非常类似。

线程有一个程序计数器(\textrm{PC}),用于记录程序从哪里获取指令。

 每个线程都有自己的一组用于计算的寄存器,没错就是这么牛啤,人手一套的那种。

所以,如果有两个线程运行在同一处理器上,从运行一个线程 T1 切换到另一个线程 T2 时:

必定会发生 上下文切换 (context switch),我们讲过进程的上下文切换,它是通过 PCB 解决的。 

而线程的上下文切换也是类似于进程的上下文切换的,线程是通过 TCB 解决的。

  • 对于进程:我们将状态保存到进程控制块(PCB )
  • 对于线程:我们要保存每个线程的状态,就需要一个或多个线程控制块(TCB

 但是!与进程相比,线程的上下文切换有 "一点" 不同!

🔍 主要区别:线程的上下文切换,地址空间保持不变(这意味着不需要切换当前使用的页表)。

  • 当 T1\rightarrow T2 时,T1 的寄存器状态被保存,T2 的寄存器状态被恢复,地址空间保持不变。
  • 线程的创建和切换成本是很低的,非常的便宜,因为它们只需要一个栈和存储寄存器。

在多个线程中,每个线程独立运行,不是地址空间中只有一个栈,而是每个线程都有一个栈。

💭 假设:有一个多线程的进程,它有两个线程,结果地址空间看起来不同:

  • 从图中可以观察到,两个栈跨越了进程的地址空间,因此所有位于栈上的变量、参数、返回值和其他能放在栈上的东西,将被放置在线程本地 (thread-loacl) 存储的地方。
  • 多个栈也破坏了地址空间布局的美感,以前,堆和栈可以互不影响的增长,直到空间耗尽。而现在多个栈就没有这么简单了,值得庆幸的是,通常栈不会很大(除非大量使用递归程序)。

为什么要用线程?为什么?因为快!

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2022.
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces

A. Silberschatz, P. Galvin, and G. Gagne,

Operating System Concepts, 9th Edition, John Wiley & Sons, Inc., 2014, ISBN 978-1-118-09375-7.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

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

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

相关文章

MySQL 索引底层探索:为什么是B+树?

MySQL 索引底层探索:为什么是B树? 1. 由一个例子总结索引的特点2. 基于哈希表实现的哈希索引3. 高效的查找方式:二分查找4. 基于二分查找思想的二叉查找树5. 升级版的BST树:AVL 树6. 更加符合磁盘特征的B树7. 不断优化的B树&#…

企业信息化选型之辨

一般说大公司的报价比较高,其市场人员也宣传东西好所以卖的贵。这个说法占不住脚。大公司东西贵的核心原因是成本高。应用软件开发领域,大公司小公司技术差不多,功能也很容易模仿,细节有差异不假,但是数量级还是在一个…

2024年华为OD机试真题-求满足条件的最长子串的长度-Java-OD统一考试(C卷)

题目描述: 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度,字符串本身是其最长的子串,子串要求: 1、 只包含1个字母(a~z, A~Z),其余必须是数字; 2、 字母可以在子串中的任意位置; 如果找不到满足要求的子串,如全是字母或全是数字,则…

ffmpeg Android 笔记

目录 没有示例项目 编译好的.a文件 ffmpegandroid 延时有220ms rk官方有例子 ffmpeg Android 笔记 没有示例项目 编译好的.a文件 FFmpeg-Android/ffmpeg-android-aarch64-34/lib at main yhbsh/FFmpeg-Android GitHub ffmpegandroid 看到了音频解码器 FFmpegAndroid/a…

rabbitMQ版本问题与下载

都到现在了,大家不会安装东西还是不看版本吧 云服务器买的是centos7,而erlang在24版本后不支持centos7了 所以需要找24版本以下的erlang,而不同erlang对应不同rabbitmq所以需要对应 下载erlang 说实话,自己安装,还是…

【CSS】高级元素:列表、表格、表单

列表 列表的元素 有序列表:ol、li无序列表:ul、li自定义列表:dl dt dd 自定义列表 dl 定义列表,直接元素只能是dt、dd dt 列表中每一项的项目名 dd 列表的每一项的具体描述 表格 table 表格border-collapse:collapse; (塌陷的…

react diffing算法及函数柯里化

一.deffing 算法 (1)虚拟DOM中Key的作用: 当状态中的书韩剧发生变化时,react会根据【新数据】生成【新的虚拟DOM】,随后React进行【新虚拟 DOM】与【旧虚拟DOM】的diff比较,比较规则如下 : a.旧…

RIP协议(路由信息协议)

一、RIP协议概述 RIP协议(Routing Information Protocol,路由信息协议)是一种基于距离矢量的内部网关协议,即根据跳数来度量路由开销,进行路由选择。 相比于其它路由协议(如OSPF、ISIS等)&#…

C++ | string类学习 | string的常见接口使用方式

目录 为什么要学习string类? C语言中的字符串 OOP面向对象编程 两个面试题 标准库中的string类 string类了解 string类的文档介绍 总结 string类的常用接口说明 string类对象的常见构造 string类对象的容量操作 size()和length() clear() resize(size…

【JVM】关于JVM垃圾回收

文章目录 🌴死亡对象的判断算法🌸引用计数算法🌸可达性分析算法 🌳垃圾回收算法🌸标记-清除算法🌸复制算法🌸标记-整理算法🌸分代算法🌸哪些对象会进入新生代&#xff1f…

idea2023.2.1 java项目-web项目创建-servlet类得创建

如何创建Java项目 1.1 方式1: 1.2 方式: 1.3 方式 如何创建web项目 方式 ----- 推荐 如何创建servlet类 复制6 中得代码 给servlet 配置一个路径 启动tomcat 成功了

Netty进阶

三. Netty 进阶 1. 粘包与半包 1.1 粘包现象 服务端代码 public class HelloWorldServer {static final Logger log LoggerFactory.getLogger(HelloWorldServer.class);void start() {NioEventLoopGroup boss new NioEventLoopGroup(1);NioEventLoopGroup worker new Ni…

时序预测 | Python实现VMD-CNN-LSTM时间序列预测

时序预测 | Python实现VMD-CNN-LSTM时间序列预测 目录 时序预测 | Python实现VMD-CNN-LSTM时间序列预测预测效果基本介绍模型描述代码设计预测效果 基本介绍 VMD-CNN-LSTM 是一种混合深度学习模型,结合了变分模态分解(VMD)、卷积神经网络(CNN)和长短期记忆网络(LSTM)的…

C#,简单,精巧,实用的按类型删除指定文件的工具软件

点击下载本文软件(积分): https://download.csdn.net/download/beijinghorn/89059141https://download.csdn.net/download/beijinghorn/89059141 下载审核通过之前,请从百度网盘下载(无积分):…

7 X 24h智能安全运维再升级!Fortinet 全面集成全新 FortiGuard SOCaaS

数字化时代网络安全威胁层出不穷,网络犯罪分子的狡诈攻击手段不断翻新,传统安全防御手段亟需进化。更为棘手的是,网络安全专业人才的匮乏,让众多企业陷入安全运营的困境。为了有效应对这一挑战,Fortinet全新推出FortiG…

i++的理解

package com.example.elasticsearch;public class Test1 {public static void main(String[] args) {int i 10;i i;System.out.println(i);} }以上代码输出为10,为何? 这个问题涉及到Java中的后缀递增运算符(i)的工作原理。当你…

【Python如何使用requests+re库进行简单爬虫实例应用】

1、安装requests库 (1)直接winR输入cmd进入命令行界面,执行命令:pip install requests (2)再Pycharm中,’File’-’Settings’-’Python interpreter’-’’-搜索’requests’-’install package’下载,如下图所示 2、实例&…

UE4几个常用节点链接

UE4几个常用节点链接 2017-12-02 12:54 1. 流光材质(及uv平铺次数) 2. 跑九宫格 3.闪光3。1 粒子闪烁效果 4.图案重复5.平移扭曲 6.溶解 刀光的uv滚动图片源或采样节点属性里改成clamp无后期发光光晕anistropic 各向异性高光法线图 法线图叠加 blendangle orrectedNo…

3083. 字符串及其反转中是否存在同一子字符串

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 给你一个字符串 s ,请你判断字符串 s 是否存在一个长度为 2 的子字符串&#xf…

springboot Guacamole

SpringBoot集成 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/PO…