当前位置: 首页 > news >正文

操作系统线程

进程那一章,我们留下了一个问题
在这里插入图片描述第一个cpu调用进程,进程调用i/o设备,主动进入ready 队列
第二个cpu将程序执行时间平均分时,进程执行时间到
第三个fork函数,我们上一章的lab有实践,可以看出是父进程主动条用fork函数产生子进程
第四个interrupt,上一章我们有演示wait等待,所以这个也是主动的。
在这里插入图片描述上一章我们做的实验可以看出,这里的执行流内存不一样,pid不一样,但子进程的内存数据是clone父进程的。
这里有个坏处
在这里插入图片描述如果能在一个进程当中出现两个一样的执行流,这两个执行流共享内存空间
我们管这样的方式叫做并发的线程

多进程通信和多线程通信的区别:
多进程通信如父进程正在进行copy文件,而子进程有一个取消按钮
在这里插入图片描述点击之后取消按钮产生一个子进程,父进程等待子进程执行,发现子进程是中断父进程

多线程通信 父线程1在copy文件,产生n个子线程(因为可能要copy多个文件夹),然后当点击取消时,产生要给wait abouting线程,去通知父线程取消copy文件。
在这里插入图片描述两者的区别在于,点击取消事件时,进程会产生一此clone,子进程要clone父进程,产生一个内存空间
在这里插入图片描述这里需要实验进行演示,不然不好理解。

进程切换开销
在这里插入图片描述我们推出线程这个概念的动机

在这里插入图片描述线程的定义
下面我们可以看到单线程的单进程只有一个PCB+code+date区域;而单进程多线程是共享code+data+files区域的。其实就是共享了存储数据、代码、全局变量,但每个线程都有自己的堆栈空间和寄存
在这里插入图片描述单cpu多线程
线程并发,需要来回切换
在这里插入图片描述多cpu多线程
多线程在多cpu环境下也可以设置为并行模式
在这里插入图片描述现在操作系统的线程概念
在这里插入图片描述多核编程
我们需要设计程序时将多核的性能应用起来,不然全是顺序执行的单进程单线程的应用,完全是浪费资源的行为。
在这里插入图片描述多核线程模型
在这里插入图片描述多线程模型
多对一模型,用户线程在用户模式下一个进程有多个线程,这个进程对应一个内核线程,这个进程有多个线程,也就达成了多个用户线程对应一个内核线程
在这里插入图片描述如果只有一个内核
虽然我们也有多个进程(执行流),在用户感觉上是多个进程并行,但是其实因为我们只有一个内核,所以一次只能运行一个线程,所以这里还是并发,但这里不止是进程的并发,也是线程的并发,上面那个一对多每个进程最少有一个线程可以和其他进程进行并发,这就是单核和多核的区别。
在这里插入图片描述

一对一
这里可以看出不管是进程还是线程都做到一对一,实现逻辑上基本可以说这些进程是并行的,但是这也取决于核心数量

在这里插入图片描述多对多
多路复用,取决于cpu的调度,每个进程的开销不一样,需要cpu进行调度去分配内核线程

在这里插入图片描述线程库
linux关注于posix pthread 这个p代表用户线程和内核线程都可以被创建

在这里插入图片描述

相关文章:

操作系统线程

进程那一章,我们留下了一个问题 第一个cpu调用进程,进程调用i/o设备,主动进入ready 队列 第二个cpu将程序执行时间平均分时,进程执行时间到 第三个fork函数,我们上一章的lab有实践,可以看出是父进程主动条用…...

vue3中如何定义响应式变量

vue2中定义方式&#xff1a; 熟悉vue2的前端开发小伙伴&#xff0c;都知道定义变量的方式是属于 选项式写法&#xff0c;所有的变量名全都定义在 data(){return { title:‘hello world’}},里&#xff0c;如下图所示&#xff1a; <template><div><h1>{{tit…...

【C++修炼之路】20.手撕红黑树

每一个不曾起舞的日子都是对生命的辜负 红黑树实现:RBTree 前言一.红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质二.红黑树的结构2.1 红黑树节点的定义2.2 红黑树类的封装三.红黑树的插入情况1&#xff1a;只变色情况2&#xff1a;变色单旋情况3&#xff1a;双旋插入的代…...

树状数组(高级数据结构)-蓝桥杯

一、简介树状数组 (Binary Indexed Tree,BIT)&#xff0c;利用数的二进制特征进行检索的一种树状结构。一种真正的高级数据结构&#xff1a; 二分思想、二叉树、位运算、前缀和。高效!代码极其简洁!二、基本应用数列a1,a2,....,an&#xff0c;操作&#xff1a;单点修改&#xf…...

Flink-多流转换(Union、Connect、Join)

文章目录多流转换分流基本合流操作联合&#xff08;Union&#xff09;连接&#xff08;Connect&#xff09;基于时间的合流——双流联结&#xff08;Join&#xff09;窗口联结&#xff08;Window Join&#xff09;间隔联结&#xff08;Interval Join&#xff09;窗口同组联结&a…...

kubeadmin安装k8s集群

目录 一 、环境部署 1、服务器规划 2、环境准备 二、所有节点安装docker 1、配置yum源&#xff0c;安装docker 2、配置daemon.json文件 三、所有节点安装kubeadm、kubelet 和kubectl 四、部署k8s集群 1、查看初始化需要的镜像 2、导入镜像 3、初始化kubeadm 3.1 方…...

java3月train笔记

java笔记 day01 一、jdk和idea下载及安装&#xff08;一般不建议装C盘&#xff09;&#xff1a; jdk&#xff1a;java开发环境 idea&#xff1a;开发工具&#xff08;软件&#xff09;&#xff0c;用来编写代码的 苍老师文档服务器&#xff1a;doc.canglaoshi.org jdk下载&…...

Apollo Config原理浅析

文章目录1. 简介2. 基本功能3. Apollo关键功能实现原理3.1 框架整体原理3.1.1 Apollo角色3.1.2 框架执行原理3.1.3 整体组成3.2 细节实现3.2.1 Eureka和不同角色机器的关系3.2.2 Meta Server的作用3.2.3 ReleaseMessage消息实现原理3.2.4 Client的通信方式1. 简介 apollo是携程…...

Kubernetes二 Kubernetes之实战以及pod详解

Kubernetes入门 一 Kubernetes实战 本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 1.1 Namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。…...

机械革命黑苹果改造计划第四番-外接显示器、win时间不正确问题解决

问题 1.无法外接显示器 最大的问题就是目前无法外接显示器&#xff0c;因为机械革命大多数型号笔记本电脑的HDMI、DP接口都是直接物理接在独显上的&#xff0c;内屏用核显外接显示器接独显&#xff0c;英伟达独显也是黑苹果无法驱动的&#xff0c;而且发现机械革命tpyec接口还…...

Linux docker(03)可使用GPU渲染的x11docker实战总结

该系列文章的目的旨在之前的章节基础上&#xff0c;使用x11docker构建一个可以使用GPU的docker容器。该容器可以用于3D图形渲染/XR 等使用GPU渲染的程序调试和运行。 0 why docker 为什么非要用x11docker&#xff0c;而不是其他的docker呢&#xff1f; 因为一般的docker是不…...

【Linux操作系统】【综合实验一 Linux操作基础】

文章目录一、实验目的二、实验要求三、实验内容四、实验报告要求一、实验目的 要求掌握Linux基础操作&#xff0c;熟悉Linux行界面&#xff0c;并明白操作的原理以及目的&#xff1b;熟悉Linux系统环境。 二、实验要求 通过这个第一阶段实验&#xff0c;要求掌握以下操作与相…...

关于监控服务器指标、CPU、内存、警报的一些解决方案

文章目录关于监控服务器指标、CPU、内存、警报的一些解决方案Prometheus Grafana 配置 IRIS / Cach 监控服务器Prometheus简介特点架构图Grafana简介特点配置流程自定义Prometheus接口定义配置 Exporter 监控服务器系统资源简介配置流程使用 Alertmanager报警简介配置流程基于…...

vue3全家桶技术栈基础(一)

在认识vue3全家桶之前,先简单回顾一下vue2的全家桶 一.在vue2中&#xff0c;全家桶技术栈 技术栈: vue2 vue-cli vuex3vue-router3webpack elementUI 1.vue-cli 脚手架构建vue项目&#xff0c;CLI 服务是构建于 webpack 和 webpack-dev-server构建快速生成一个vue2的开发项…...

群晖-第2章-设置HTTPS访问

群晖-第2章-设置HTTPS访问 本章介绍如何通过HTTPS访问群晖&#xff0c;前置要求是完成群晖-第1章-IPV6的DDNS中的内容&#xff0c;可以是IPV4也可以是IPV6&#xff0c;或者你有公网IP&#xff0c;直接添加DNS解析也可以。只要能通过域名访问到nas就行。 本文参考自群晖添加SS…...

005 利用fidder抓取app的api,获得股票数据

一、下载安装fidder 百度搜索fidder直接下载&#xff0c;按提示安装即可。 二、配置fidder 1. 打开fidder&#xff0c;选择tools——options。 2. 选择HTTPS选项卡&#xff0c;勾选前三项&#xff0c;然后点击右侧【actions】&#xff0c;选择【trust root certificate】&a…...

京东测试进阶之路:初入测试碎碎念篇

1、基本的测试用例设计方法 基本的测试用例设计方法&#xff08;边界值分析、等价类划分等&#xff09;。 业务和场景的积累&#xff0c;了解测试需求以及易出现的bug的地方。 多维角度设计测试用例&#xff08;用户、业务流程、异常场景、代码逻辑&#xff09;。 2、需求分析 …...

华为OD机试 - 乘积最大值(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】

乘积最大值 题目 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素长度乘积的最大值 如果没有符合条件的两个元素返回0 输入 输入为一个半角逗号分割的小写字符串数组 2 <= 数组长度 <= 100 0 < 字符串长度 <= 50 输出 两个没有相同字符的元…...

Java并发知识点

文章目录1. start()和run()方法的区别&#xff1f;2. volatile关键字的作用&#xff1f;使用volatile能够保证&#xff1a;防止指令重排3. sleep方法和wait方法有什么区别&#xff1f;sleep()方法4. 如何停止一个正在运行的线程&#xff1f;方法一&#xff1a;方法二&#xff1…...

前端 ES6 环境下 require 动态引入图片以及问题

前端 ES6 环境下 require 动态引入图片以及问题require 引入图片方式打包体积对比总结ES6 环境中&#xff0c;通过 require 的方式引入图片很方便&#xff0c;一直以来也没有出过什么问题&#xff0c;后来项目中&#xff0c;需要动态引入图片。 require 动态引入也容易实现&am…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...