计算机操作系统-第十六天

目录

线程的实现方式

用户级线程

内核级线程

多线程模型

一对一模型

多对多模型

多对多模型 

本节思维导图


线程的实现方式

用户级线程

历史背景:早期操作系统只支持进程,不支持线程,当时的线程是由线程库实现的

本质:从代码角度来看,线程其实就是一段代码逻辑 

int main()
{int i = 0;while(true){if(i == 0) {处理视频聊天的代码;}if(i == 1) {处理视频聊天的代码;}if(i == 2) {处理视频聊天的代码;}i = (i+1) % 3; }
}

在上面这段代码中,while循环就相当于一个“线程库”,它完成了对线程的管理工作(调度即函数调用):在进入while循环后,由于取模运算的特性,i的值会在0,1,2之间无限循环直到在线程的运行过程中出现了比如break等操作才会结束

注意事项:1、用户级线程的管理工作由线程库来完成,所有的线程管理工作都由应用程序负责

2、用户级线程中,线程切换可以在用户态下完成,无序操作系统的干预进行CPU变态

3、操作系统不能意识到用户级线程的存在(只有用户才能感知到用户级线程的存在)

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

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高,多个线程不可以在多核处理机上并行运行(此时CPU还是给进程分配系统资源的)

内核级线程

大多数现代操作系统都实现了,内核级线程

注意事项:1、内核级线程的管理工作由操作系统内核完成

2、内核级线程中,线程调度、切换等操作由内核负责,必须要在核心态下完成,所以需要操作系统干预从而进行CPU变态

3、操作系统会为每个内核级线程建立相应的TCB,通过TCB对线程进行管理,它是操作系统能看到的线程

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强,多线程可以在多核处理机上执行(内核级线程是处理机调度的基本单位,进程是分配资源的基本单位,在多核CPU的环境下,这些内核级线程可以被分配到不同的核心下并发执行,不同的内核级线程中又可以跑不同的代码逻辑)

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

多线程模型

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

一对一模型

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

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

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

多对多模型

特点:多个用户级线程映射到一个内核级线程,且一个线程只被分配一个内核级线程

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

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发程度不高,且多线程不可在多核处理机上并行运行(一个线程只被分配一个内核级线程)

注意事项:操作系统只能看见内核级线程,因此只有内核级线程才是处理机分配的单位

多对多模型 
 

特点:n个用户级线程映射到m个内核级线程(n>=m),每个用户进程对应m个内核级线程,克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,系统资源开销过大的缺点

注意事项:1、用户级线程是“代码逻辑”的载体,内核级线程是“运行机会”的载体

2、内核级线程才是处理机分配的基本单位,多核CPU环境下,上图的进程最多被分配两个核

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

4、内核级线程中可以运行任意一个有映射关系的用户级线程中,只有连个内核级线程中正在运行的“代码逻辑”均阻塞时,改进程才会阻塞:

本节思维导图

~over~

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

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

相关文章

【普中】基于51单片机简易计算器显示设计( proteus仿真+程序+设计报告+实物演示+讲解视频)

目录标题 📟1. 主要功能:📟2. 讲解视频:📟3. 设计说明书(报告)📟4. 仿真📟5. 实物烧录和现象📟6. 程序代码📟7. 设计资料内容清单 【普中开发板】基于51单片机简易计算器…

二叉树中的中序遍历、反向遍历和逆序

概念 中序遍历(Inorder Traversal): 中序遍历是二叉树遍历的一种方式,它的顺序是左子树、根节点、右子树。对于一个二叉搜索树(BST),中序遍历可以得到一个升序的节点序列。中序遍历的步骤是首先…

深度学习之模型权重

在深度学习中,模型的权重(weights)是指神经网络中的参数,这些参数用于调整和学习模型的行为,以便能够对输入数据进行有效的映射和提取有用的特征。深度学习模型通常由许多神经元和连接组成,而权重就是连接这…

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…

数字图像处理 - 使用Rembg库在Python中轻松删除背景

Python 中的 rembg 模块是一个用于去除图像背景的库。它基于Rembg算法,采用神经网络来执行背景去除任务。该算法经过训练,可以识别图像中的前景物体并将其与背景分开,从而产生具有透明背景的图像。 rembg库基于Rembg算法,该算法本身有一个有趣的历史。Rembg算法由研究员兼软…

鸿蒙开发组件之Web

一、加载一个url myWebController: WebviewController new webview.WebviewControllerbuild() {Column() {Web({src: https://www.baidu.com,controller: this.myWebController})}.width(100%).height(100%)} 二、注意点 2.1 不能用Previewer预览 Web这个组件不能使用预览…

C/C++函数调用栈信息输出(backtrace backtrace_symbols)

C/C函数调用栈信息输出(backtrace & backtrace_symbols) 最近工作,搞了一个死锁问题,加了好多输出无法定位问题。 就想着在锁操作调用的地方输出函数调用栈信息,试了一下,竟然实现了。 源代码 #incl…

《PCL多线程加速处理》-配准-icp

《PCL多线程加速处理》-配准-icp 一、效果展示二、具体实现三、代码一、效果展示 数据越大,速度提升效果越快 1、48万点 2、十万点 3、三万点 4、9000点 配准数据 二、具体实现

构建智能外卖跑腿小程序:技术实践与代码示例

在快节奏的现代生活中,外卖跑腿服务已成为人们日常生活中不可或缺的一部分。为了提供更智能、高效的外卖跑腿体验,本文将深入探讨构建一款智能外卖跑腿小程序所需的关键技术,并提供相应的代码示例。 1. 地理位置服务的整合 外卖跑腿小程序…

小程序 -网络请求post/get

1.1网络请求的概念(post和get) 1.2步骤 1.3 应用函数 js里面写,用bindtap绑在控件上,就不讲了 实例代码: //发起get数据请求get_info(){wx.request({url:https://www.escook.cn/api/get,//请求的接口地址,必须基于https协议//请求的方式met…

ElasticSearch之Shard request cache settings

对于查询操作,Elasticsearch提供了缓存特性来暂存结果。 对于相同条件的查询请求,在缓存中的数据失效前,响应后续的查询操作时可以直接从缓存中提取结果,有效降低检索操作的时延,提升检索数据时的体验。 提到缓存相关的…

SpringBoot项目打成War包部署

简介 一般情况下,在SpringBoot项目开发完成进行服务器部署时,都是打成JAR包进行部署运行的。但是在有些情况下也需要将其打成War包使用Tomcat进行部署。本篇文章就简单介绍一下SpringBoot如何打成War包。 注意: 测试Demo的SpringBoot版本为2…

python selenium chrome114版本之后环境配置和携带缓存打开chrome

尽力局 chrome驱动环境配置chrome打开带缓存设置待缓存打开自动关闭浏览器自动关闭浏览器弹窗 最终代码找资料难啊最终效果代码 依赖包和生成依赖包方法关闭谷歌升级 chrome驱动环境配置 网上找到的资料,我现在安装的是120版本的,这个资料是可行的。比较…

Jetbrains IDEA 2023.3 更新

本心、输入输出、结果 文章目录 Jetbrains IDEA 2023.3 更新前言Jetbrains IDEA 2023.3 主要更新内容功能更新用户体验优化数据库工具花有重开日,人无再少年实践是检验真理的唯一标准Jetbrains IDEA 2023.3 更新 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq…

mysql分页查询性能测试

测试环境:1.1亿数据,约22GB大小,6核12线程32GBmysql8,ssd硬盘 表为常见的订单表,表中26个字段。 网上传说limit不同的使用方式对性能影响很大,自己也有点好奇,于是直接做个测试。 下面直接展示mysql在进…

【数据库设计和SQL基础语法】--查询数据--排序

一、排序数据 1.1 ORDER BY子句 单列排序 单列排序是通过使用 ORDER BY 子句对查询结果按照单个列进行排序。以下是单列排序的一些示例: 升序排序(默认): SELECT column1, column2, ... FROM your_table_name ORDER BY column_t…

对局域网络中应用了网络变压器 POE供电功能的供电端设备间的连接方法

Hqst华轩盛(石门盈盛)电子导读:一起来了解局域网络中应用了网络变压器 POE供电功能的设备间的来连接方法 POE标准为使用以太网的传输电缆输送直流电到POE兼容的设备定义了两种连接方法: 第一,中间跨接法 一种称作"中间跨接法"( Mid -Span ),使用独立的PoE…

【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归

【【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归 1. autograd 包,自动微分2. 线性模型回归演示3. GPU进行模型训练 小结:只需要将前向传播设置好,调用反向传播接口,即可实现反向传播的链式求导 1. autograd 包&#x…

pytorch环境配置

1.创建环境 conda create --name pytorch python3.11.5 2.激活环境 source activate pytorch 3.添加国内镜像源: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsin…

jmeter,取“临时重定向的登录接口”响应头中的cookie

1、线程组--创建线程组; 2、线程组--添加--取样器--HTTP请求; 3、Http请求--添加--后置处理器--正则表达式提取器; 4、线程组--添加--监听器--查看结果树; 5、线程组--添加--取样器--调试取样器。 首先理解 自动重定向 与跟随…