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

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执行程序,虽然可行但这也是一个很繁琐的过程。我们至少需要做到:

  1. 在内存中找到一块大小合适的区域装入程序
  2. 找到函数的入口,设置好PC计数器让CPU开始执行程序。

为了完成上述两个步骤,聪明的程序员设计了一个叫 操作系统的程序。

  1. 程序从磁盘加载到内存并跑起来,叫进程 Process
  2. CPU执行的第一个函数,叫 main函数
    上述两个步骤,是操作系统的基础。

从进程到线程

我们知道进程无非就是内存中的一段区域,这段区域保存了 CPU执行的机器指令以及函数运行时的堆栈信息,那么要想让进程运行,就需要把main函数的第一条机器指令接入 PC 计数器,这样进程就运行起来了。
在这里插入图片描述

http://www.lryc.cn/news/64492.html

相关文章:

  • 大数据Doris(十一):Aggregate 数据模型
  • osg::Drawable类通过setDrawCallback函数设置回调函数的说明
  • Python基础合集 练习17(类与对象)
  • 再多猜一次就爆炸(小黑子误入)
  • 图像超分辨率简单介绍
  • 【Liunx】进程的程序替换——自定义编写极简版shell
  • c++标准模板(STL)(std::array)(三)
  • c#笔记-创建一个项目
  • Photoshop如何使用图像调色之实例演示?
  • IDEA中使用Git提交代码提示:您即将把CRLF行分隔符提交到Gt仓库。 建议将core.autocrlf Git特性设置为trUe,以免发生行分隔符问题。
  • ArduPilot之开源代码LibrarySketches设计
  • 第一章:概述
  • MySQL --- DDL图形化工具表结构操作
  • 归一化处理(2023寒假每日一题 14)
  • 无公网IP,外网远程连接MySQL数据库
  • OJ刷题 第十四篇(递归较多)
  • FileZilla读取目录列表失败(vsftpd被动模式passive mode部署不正确)
  • 【Java面试八股文】数据库篇
  • Android Glide加载图片、网络监听、设置资源监听
  • 等保定级报告模版
  • 计算机组成原理4.2.2汉明码
  • JavaScript全解析——本地存储的概念、用法详解
  • 对象浅拷贝的5种方式
  • Java每日一练(20230504)
  • 【深度学习】计算机视觉(13)——模型评价及结果记录
  • 项目经理在项目中是什么角色?
  • 【技术分享】防止根据IP查域名,防止源站IP泄露
  • Baumer工业相机堡盟相机如何使用偏振功能(偏振相机优点和行业应用)(C#)
  • 无损以太网与网络拥塞管理(PFC、ECN)
  • 爬虫大全:从零开始学习爬虫的基础知识