操作系统-线程的实现方式和多线程模型(用户级线程 内核级线程 多线程模型的情况)和线程的状态,转换,组织,控制

文章目录

线程的实现方式和多线程模型

总览

在这里插入图片描述

线程的实现方式

用户级线程

程序自己通过自己设计的线程库实现线程管理调度

如QQ有三个功能,这三个功能需要同时进行,通过进程实现就是三个进程分别实现这三个功能

在这里插入图片描述
如果由一个进程实现?相当于并发执行三个功能
在这里插入图片描述

线程的管理工作:由线程库(如上面通过while),不是操作系统。
线程切换由程序自己的线程库来完成,不需要CPU变态
操作系统不能意识到用户级线程的存在,它只是在执行进程的代码,代码中的线程库部分能够实现并发执行各个线程

优点:切换线程只需要在用户态完成
缺点:被阻塞在某段代码时整个进程的其他线程都会阻塞,且多个线程都是运行在一个CPU的(CPU的调度单位依然是进程)

在这里插入图片描述

内核级线程

线程的管理工作由操作系统完成
线程的切换需要CPU变态(需要操作系统介入)

引入内核级线程后,CPU调度的基本单位是线程,多个线程也可以分派到多个CPU上并行运行

在这里插入图片描述

多线程模型

一对一

在这里插入图片描述

多对一

在这里插入图片描述

多对多

此时内核级线程与用户级线程的对应关系由有两种
一个内核级线程对应多个用户级线程就是之前的多对一的情况
而一个内核级线程对应一个用户级线程就是之前的一对一情况

在这里插入图片描述

小结

在这里插入图片描述

线程的状态,转换,组织,控制

总览

线程的状态和转换与进程的差不多
在这里插入图片描述

线程的状态与转换

时间用完是并发执行中的轮换的原因

我们通常关注这三个状态
在这里插入图片描述

线程的组织与控制

保存堆栈指针是在保存该线程的栈顶地址和栈底地址,切换线程后,该线程的堆栈信息依然在内存中

组织线程表的类型可以不同,如将系统的线程都组成一张表,或者按照进程来组成线程表,又或者按照线程状态来分状态组织线程表

在这里插入图片描述
控制就是实现线程状态的切换和线程的调度

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

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

相关文章

06 单目初始化器 Initializer

文章目录 06 单目初始化器 Initializer6.1 成员变量/函数6.2 初始化函数 Initialize()6.3 计算基础矩阵 F \boldsymbol{F} F 和单应矩阵 H \boldsymbol{H} H6.3.1 RANSAC 算法6.3.2 八点法计算 F \boldsymbol{F} F 矩阵: ComputeF21()6.3.3 计算基础矩阵 F \boldsymbol{F} …

怎么使用cmd命令来进行Vue脚手架的项目搭建

前言 使用vue搭建项目的时候,我们可以通过对应的cmd命令去打开脚手架,然后自己配置对应的功能插件 怎么打开 我们打开对应的cmd命令之后就开始进入对应的网站搭建 vue ui 然后我们就打开对应的项目管理器来进行配置----这里我们打开开始创建新的项目…

【VS Code+Verilog+Vivado使用】(2)基本设置

文章目录 2 基本设置2.1 字体大小2.2 Tab大小2.3 选中高亮2.4 文件编码 2 基本设置 2.1 字体大小 方法1:VS Code左下角 > 管理 > 设置,搜索"font size",点击左侧"字体",根据需要设置"editor.fon…

穷游网酒店数据采集与可视化分析与实现

摘 要 穷游网酒店数据采集与可视化分析大屏的背景是为了满足用户对酒店数据的需求以及提供数据洞察和决策支持。随着旅游业的快速发展,人们对酒店信息的需求日益增加,而穷游网作为一家专注于旅游信息的网站,拥有丰富的酒店数据资源。 这个大…

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…

Flink实战四_TableAPISQL

接上文:Flink实战三_时间语义 1、Table API和SQL是什么? 接下来理解下Flink的整个客户端API体系,Flink为流式/批量处理应用程序提供了不同级别的抽象: 这四层API是一个依次向上支撑的关系。 Flink API 最底层的抽象就是有状态实…

腾讯mini项目总结-指标监控服务重构

项目概述 本项目的背景是,当前企业内部使用的指标监控服务的方案的成本很高,无法符合用户的需求,于是需要调研并对比测试市面上比较热门的几款开源的监控方案(选择了通用的OpenTelemetry协议:Signoz,otel-…

JVM学习

1.Java虚拟机内部有哪些线程共享,那些线程隔离 程序计数器: 通过改变这个计数器的值来选取下一条需要执行的字节码命令 Java虚拟机栈: 栈,每个方法被执行时,Java虚拟机都会同步的创建一个栈帧用于存储局部变量表&…

java 实现微信公众号关键字自动回复

接上一篇内容https://blog.csdn.net/YISHENGYOUNI95/article/details/134383219 因为设置了公众号的服务器配置,导致之前设置的公众号自动回复失效了 需要通过之前配置的接口实现自动回复 参考一下官方文档回复文本消息 | 微信开放文档 根据用户发送的消息&#…

中国的茶文化:历史、传统与生活

中国的茶文化:历史、传统与生活 一、引言 茶,这一神奇而古老的饮品,与中国的历史、文化和生活方式紧密相连。中国的茶文化,源远流长,博大精深,是中华文明的重要组成部分。它不仅是一种饮料,更是…

Jedis连接池究竟是何物?

一、前言 连接池的用途实际上有过开发经验的朋友都已经比较清楚了,当资源对象的创建/销毁比较耗时的场景下,可以通过"池化"技术,达到资源的复用,以此来减少系统的开销、增大系统吞吐量,比如数据库连接池、线…

雍禾植发:“地球生发计划”修复荒漠化土地超百万平方米

日前,雍禾植发宣布“毛发森林•地球生发计划”从正式发起到2023年11月19日秋季造林结束,已经在内蒙古自治区额济纳旗东风镇额很查干嘎查种下60000棵树,修复荒漠化土地超过102.01万平方米。 作为此次公益活动的“落脚地”,额济纳旗地处内蒙古…

Swift Vapor 教程(项目创建)

The future of web development. 在初次接触 Swift Vapor 时,感觉代码比较清爽,用起来逻辑比较清晰。 困难点: Swift Vapor 使用了JWT管理三方库,比较吃网络Swift Vapor 搭建环境比较复杂初次使用Swift Vapor 尽量不要使用MySql。…

Linux内存常用命令指标详解

1. free rootnode02:~# free -m total used free shared buff/cache available Mem: 3919 1194 1738 1 986 2446 Swap: 0 0 0free 输出的是一个表格,其中…

网页版idea、pycharm搭建

官网教程提供了两种方法:1、有给应用版idea或pycharm安装插件来开放网页服务;2、使用docker创建容器开放网页服务。这边推荐并介绍第二种步骤。 基本过程为:拉取相关镜像;开启服务;使用网页版 (细节和注意点…

3D数据转换器HOOPS Exchange如何获取模型的几何数据? 干货预警!

一、概述 前面讲解过模型在内存中的结构,现在回顾一下,当模型导入成功后,整个模型数据会以原生结构的 PRC 组装树形式存放到内存中。(申请 HOOPS Exchange 试用) PRC结构的主要类型包含四种,分别是…

Qt 调用系统键盘

Wow64DisableWow64FsRedirection(&pvoid) 函数用于禁用 32 位 Windows 程序对文件系统重定向的支持。它将禁用文件系统重定向,以便在运行 32 位应用程序时,可以访问 64 位系统目录。pvoid 是一个指向先前启用的文件系统重定向状态的指针。 构建了要…

(2)(2.10) LTM telemetry

文章目录 前言 1 协议概述 2 配置 3 带FPV视频发射器的使用示例 4 使用TCM3105的FSK调制解调器示例 前言 轻量级 TeleMetry 协议 (LTM) 是一种单向通信协议(从飞行器下行的数据链路),可让你以低带宽/低波特率(通常为 2400 波…

ElasticSearch 应用实践 笔记

概述 介绍 ES 是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ElasticSearch的底层是开源库Lu…

【Golang】ModbusRTU协议CRC16校验算法

CRC校验码是通过在数据后面附加一个短的校验序列来生成的,用于检测数据在传输过程中是否发生错误。CRC16是一种特定的CRC校验算法,它生成一个16位的校验码。 下面是使用Go语言实现CRC16校验算法的代码: package main import ("encoding…