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

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.kler.cn/a/16741.html

相关文章:

  • uniCloud云对象调用第三方接口,根据IP获取用户归属地的免费API接口,亲测可用
  • influxDB 时序数据库安装 flux语法 restful接口 nodjsAPI
  • 探索Pillow库:Python图像处理的瑞士军刀
  • Rust 所有权机制
  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • 【mySql 语句使用】
  • ViveNAS - 一个基于LSM tree的文件存储实现 (一)
  • C++ srand()和rand()用法
  • hadoop伪分布式搭建教程
  • 【react从入门到精通】React JSX详解
  • pytorch学习率设置——optimizer.param_groups、对不同层设置学习率、动态调整学习率。
  • Java中几种常量池面试总结
  • OVS常用命令与使用总结
  • Python_PyStray结合Tkinter显示系统托盘图标
  • SpringMVC与SpringWebFlux
  • 【Spring Security】| 从0到1编写一个权限认证 | 学会了吗?
  • MEET开发者 | 选择和努力一样重要,专访杭州三汇测试工程师齐雪莲
  • c++标准模板(STL)(std::array)(三)
  • 高程实验8队列
  • ROS Noetic版本 rosdep找不到命令 不能使用的解决方法
  • 剑指 Offer 51. 数组中的逆序对
  • 计算机视觉 | 人工智能 自己总结 (下)
  • 数据库之事务隔离级别详解
  • 08.watchEffect.上
  • CTF权威指南 笔记 -第二章二进制文件-2.1-汇编原理
  • r语言tidyverse教程:3数据重塑tidyr