C++:计算机操作系统:多线程:高并发中的线程
高并发中的线程
- 一切要从CPU说起
- PC 程序计数器
- 从CPU到操作系统
- 从进程到线程
从这篇开始,我将会开启高性能,高并发系列,本篇是给系列的开篇,主要关注 多线程以及线程池。
一切要从CPU说起
你可能会有疑问,讲多线程为何要从CPU说起了?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质。
- CPU并不知道线程,进程之类的概念
- CPU只知道两件事。
1.从内存中取出指令
2.执行指令,然后返回步骤1
你看,在这里CPU确实不知道 线程和进程的概念。
接下来的问题是:CPU从哪里取出指令呢?答案就是 程序计数器 Program Counter ,可以理解为内存,只不过读取速度更快。
那么程序计数器存放的是什么了?答案就是:CPU将要执行的下一条指令。
PC 程序计数器
这里,我们回答1个问题
💚💚💚
PC程序计数器指令设置
PC计数器中的地址是默认自动加1 的,这当然是有道理的,因为大部分情况下CPU都是一条接一条按顺序执行,当遇到 if ,else
时,这种顺序就被打破了,那么CPU在执行这类指令时会根据计算结果来动态改变PC
程序计数器中的值,这类CPU就可以正确的跳转到需要执行的指令了。
下图,我们就分析一下,指令的生成原理
从上图我们知道,CPU要想执行一个函数,我们只需要将函数编译后的第一条指令的地址写入PC 程序计数器就可以了。
从CPU到操作系统
从上一节中,我们明白了CPU的工作原理,如果我们想让CPU执行某个函数,只需要把函数编译后的第一条指令装入PC计数器即可,这样即使我们在没有操作系统的支持下,也可以让CPU执行程序,虽然可行但这也是一个很繁琐的过程。我们至少需要做到:
- 在内存中找到一块大小合适的区域装入程序
- 找到函数的入口,设置好PC计数器让CPU开始执行程序。
为了完成上述两个步骤,聪明的程序员设计了一个叫 操作系统的程序。
- 程序从磁盘加载到内存并跑起来,叫进程 Process
- CPU执行的第一个函数,叫 main函数
上述两个步骤,是操作系统的基础。
从进程到线程
我们知道进程无非就是内存中的一段区域,这段区域保存了 CPU执行的机器指令以及函数运行时的堆栈信息,那么要想让进程运行,就需要把main函数的第一条机器指令接入 PC 计数器,这样进程就运行起来了。

相关文章:
C++:计算机操作系统:多线程:高并发中的线程
高并发中的线程 一切要从CPU说起PC 程序计数器从CPU到操作系统从进程到线程 从这篇开始,我将会开启高性能,高并发系列,本篇是给系列的开篇,主要关注 多线程以及线程池。 一切要从CPU说起 你可能会有疑问,讲多线程为何…...
大数据Doris(十一):Aggregate 数据模型
文章目录 Aggregate 数据模型 一、导入数据聚合 二、保留明细数据...
osg::Drawable类通过setDrawCallback函数设置回调函数的说明
osg::Drawable类可以通过该类的setDrawCallback函数设置回调函数类对象。被设置的回调类对象必须从osg::Drawable::DrawCallback类派生,并重写drawImplementation函数,以实现自己特定的需求。这个回调函数在每次帧事件中都会被调用(如:在帧的…...
Python基础合集 练习17(类与对象)
class Dog: pass papiDog() print(papi) print(type(papi)) 构建方法 创建类过后可以定义一个特殊的方法。在python中构建方法是__init__(),init()必须包含一个self参数 class pig(): #def__init__(self) -> None: print(‘你好’) pipgpig() 属性和方法 cl…...
再多猜一次就爆炸(小黑子误入)
目录 猜数字游戏 游戏设计思路 1.电脑随机生成一个数 2.猜数字 3.输入我是ikun,泰裤辣! 否则电脑将在一分钟后关机 游戏运行效果 源码 代码分析 代码实现关键语句 strcmp() rand()与srand() 时间戳time() 寄语 猜数字游戏 游戏设计思路 1.电脑随机生…...
图像超分辨率简单介绍
文章目录 图像超分辨率简单介绍什么是图像超分辨率?常见的图像超分辨率算法插值算法基于边缘的图像重建算法局部线性嵌入(LLE)拉普拉斯正则化 基于深度学习的超分辨率算法超分辨率CNN超分辨率GAN 步骤1. 收集数据2. 选择算法3. 训练模型4. 测…...
【Liunx】进程的程序替换——自定义编写极简版shell
目录 进程程序替换[1~5]1.程序替换的接口(加载器)2.什么是程序替换?3.进程替换的原理4.引入多进程5.系列程序替换接口的详细解析(重点!) 自定义编写一个极简版shell[6~8]6.完成命令行提示符7.获取输入的命令…...
c++标准模板(STL)(std::array)(三)
定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起 std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组…...
c#笔记-创建一个项目
创建一个项目 创建控制台程序 在你安装完成Visual Studio后打开它,你会的到一个启动窗口 点击创建新项目,选择右上角c#的没有Framework的控制台应用。 项目名称,位置自己随意。 目标框架选择NET7.0。 项目创建完成后应该你的界面应该类似…...
Photoshop如何使用图像调色之实例演示?
文章目录 0.引言1.将一张偏冷调的图像调整成暖调2.将图像调整成不同季节色彩倾向3.变换花朵的颜色4.创建人像轮廓风景5.修饰蓝天白云6.调换花草颜色 0.引言 因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其配…...
IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。
IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。 问题背景: 在IDEA中,使用Git提交代码到远程仓库时,结果弹出一个警告窗口 问题原因: …...
ArduPilot之开源代码LibrarySketches设计
ArduPilot之开源代码Library&Sketches设计 1. 简介1.1 Core libraries1.2 Sensor libraries1.3 Other libraries 2. 源由3. Library Sketches设计3.1 设计框架3.2 Example Sketches3.3 AP_Common Sketches3.3.1 配置sitl环境3.3.2 编译AP_Common3.3.3 运行AP_Common3.3.4 代…...
第一章:概述
1,因特网概述 1.网络、互联网和英特网 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网是“网络的网络…...
MySQL --- DDL图形化工具表结构操作
一. 图形化工具 1. 介绍 前面我们讲解了DDL中关于数据库操作的SQL语句,在我们编写这些SQL时,都是在命令行当中完成的。大家在练习的时候应该也感受到了,在命令行当中来敲这些SQL语句很不方便,主要的原因有以下 3 点:…...
归一化处理(2023寒假每日一题 14)
在机器学习中,对数据进行归一化处理是一种常用的技术。 将数据从各种各样分布调整为平均值为 0 0 0、方差为 1 1 1 的标准分布,在很多情况下都可以有效地加速模型的训练。 这里假定需要处理的数据为 n n n 个整数 a 1 , a 2 , ⋯ , a n a_1,a_2,⋯…...
无公网IP,外网远程连接MySQL数据库
哈喽~大家好,这篇来看看无公网IP,外网远程连接MySQL数据库。 文章目录 前言1. 检查mysql安装状态2. 安装配置cpolar内网穿透3. 创建tcp隧道,映射3306端口4. 公网远程连接4.1 图形化界面4.2 使用命令行远程连接 5. 配置固定tcp端口地址5.1 保留…...
OJ刷题 第十四篇(递归较多)
23204 - 进制转换 时间限制 : 1 秒 内存限制 : 128 MB 将一个10进制数x(1 < x < 100,000,000)转换成m进制数(2< m < 16) 。分别用 ABCDEF表示10以上的数字。 输入 x m (1 < x < 100,000,000, 2< m < 16) 输出 m进制数 样例 输入 31 16 输出 1F 答…...
FileZilla读取目录列表失败(vsftpd被动模式passive mode部署不正确)
文章目录 现象问题原因解决方法临时解决(将默认连接方式改成主动模式)从根本解决(正确部署vsftpd的被动模式) 现象 用FileZilla快速连接vsftpd服务器时,提示读取目录列表失败 问题原因 是我vsftpd服务端的被动模式没…...
【Java面试八股文】数据库篇
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 请你说说MySQL索引,以及它们的好处和坏处 请你说说MySQL的索引是什么结构,为什么不用哈希表 请你说说数据库索引的底…...
Android Glide加载图片、网络监听、设置资源监听
再搞事情之前首先创建一个项目,就命名为GlideDemo吧。 一、项目配置 创建好之后,在app模块下build.gradle的dependencies闭包中添加如下依赖: //glide//glideimplementation com.github.bumptech.glide:glide:4.11.0annotationProcess…...
nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测
nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级但强大的工具在跨境电商领域…...
别再只盯着GNSS了!用移远EC20模组实现基站定位的完整配置流程(含免费Token申请)
移远EC20模组基站定位实战:从零配置到室内场景精准落地 在物联网设备定位领域,GNSS卫星定位长期占据主导地位,但鲜为人知的是,像移远EC20这样的LTE模组还隐藏着一个被低估的功能——基站定位。当你的智能水表安装在地下室、共享设…...
用了Qoder写代码飞快,联调时却总因字段不一致返工,问题出在哪?
发版前夜,前端字段对不上后端接口,联调卡了整晚。这种场景在 AI Coding 普及后并不罕见,不少团队用了 Qoder 觉得生成快、跑通快,可一旦要改需求,系统就僵住了。看似工具背锅,其实根子往往不在速度…...
飞书文档到Markdown的突破性转换技术:feishu2md架构深度解析
飞书文档到Markdown的突破性转换技术:feishu2md架构深度解析 【免费下载链接】feishu2md 一键命令下载飞书文档为 Markdown 项目地址: https://gitcode.com/gh_mirrors/fe/feishu2md 在当今企业协作环境中,飞书文档已成为团队知识沉淀的核心载体&…...
2025夏季技术实习「抢位战」:3步解锁2500+优质机会(附避坑指南)[特殊字符]
2025夏季技术实习「抢位战」:3步解锁2500优质机会(附避坑指南)🔥 【免费下载链接】Summer2026-Internships 2025年夏季技术实习机会集合! 项目地址: https://gitcode.com/GitHub_Trending/su/Summer2026-Internships…...
从0到1:Java+AI入门实战,看完直接上手项目
文章目录前言环境准备:别急着装Python,先把JDK升到21第一滴血:让Java程序说出"人话"进阶玩法:给AI装上"记忆"和"工具"让AI记住你们聊过啥让AI能查数据库、调接口实战项目:搭建私有知识库…...
Struts2拦截器实战:从零构建权限控制与日志记录
1. Struts2拦截器机制解析 Struts2拦截器是框架最核心的机制之一,它采用AOP(面向切面编程)思想,在Action执行前后插入自定义逻辑。想象一下拦截器就像地铁安检系统:每个乘客(请求)都必须经过安检…...
嵌入式开发实战:用状态机+事件驱动框架搞定串口通信(附完整代码)
嵌入式开发实战:状态机与事件驱动框架在串口通信中的高效应用 串口通信作为嵌入式系统中最基础也最常用的外设接口之一,其稳定性和效率直接影响着整个系统的性能表现。传统的轮询式串口处理方式不仅占用大量CPU资源,还难以应对复杂通信协议和…...
矩阵按键的硬件设计与软件扫描实战
1. 矩阵按键的硬件设计要点 第一次接触矩阵按键时,我完全被它节省IO口的设计惊艳到了。想象一下,16个独立按键原本需要16个IO口,而4x4矩阵按键只需要8个IO口就能搞定。这种设计在资源受限的单片机项目中简直就是救命稻草。 硬件连接上有个容易…...
滞回比较器设计实战:从理论到参数优化
1. 滞回比较器基础:从门铃到航天器的抗噪神器 第一次接触滞回比较器是在大学电子设计课上,当时教授用一个生动的例子开场:"想象你家的门铃——如果它对任何风吹草动都响个不停,你会疯掉;但如果连用力敲门都没反应…...



