编程内功心法「底层原理系列」 底层架构原理,分析CPU处理器鲜为人知的那些秘密

news2024/12/25 9:17:50

前提概要

所谓,知彼知己百战不殆,针对于计算机的优化技术来讲,最底层也不过是针对于CPU技术的优化了,但是如果要区优化程序,涉及到CPU的执行能力,那必须要了解CPU的原理和概念以及执行过程等概念,所以小编写了本片的目的就是针对于CPU的相关知识进行讲解,当你对CPU不在陌生的时候,也就是你超神的时候了,哈哈…

CPU相关的知识

本文介绍涉及到的知识点包含,多CPU、物理核、逻辑核、超线程、进程、线程、并发、并行,以及Linux查询CPU和核的信息的方法

易混淆概念

多处理器

认真辨别语境,通常是多CPU的意思;有时多是多逻辑处理器即多核的意思,好像老外常常把一个CPU里有多个核心当成多个CPU来描述。

逻辑处理器

就是逻辑核的意思,Windows 10的中文翻译了这个特别特别容易误解的词,我觉得就是可以理解为内核程序单位。

逻辑CPU

有人用了这个词表示逻辑核的意思,但是用法的根据我保持怀疑,很容易致使误解,由于我会认为,核就是核,CPU就是CPU,为何混为一谈,好像核就是CPU同样缓存。

CPU的一~四级缓存

CPU缓存(Cache Memory)的出现是弥补CPU和主存(主内存,即内存条的)的速度差太大,用于提升效率的,有时可能也叫高速缓存

高速缓存也分了不少层,一到四级,四级不多听但确实是有。一二级是各个核心独有的三级缓存是全部核共享的,四级缓存彷佛是为了解决CPU的集显和CPU的速度差问题(CPU内能够有显卡)。通常CPU商品中只标出了三级缓存,其余都不标注。如图所示:

这里看不到L4 Cache,多是由于只有L1~L3才封装在CPU里。

一样的多个核之间的L1、L2也会有缓存一致性问题,相似多核CPU有一些协议保证多个CPU内部缓存之间一致性的协议(MESI),同一个CPU内部的多核内部的缓存的一致性问题应该也是有方案解决的


物理核、逻辑核和超线程

  • 物理核:是CPU里实实在在封装的物理硬件并发。
  • 逻辑核:利用超线程技术模拟出来的核,通常一个物理核能够虚拟出2个,就是CPU商品标出的线程数,有些资料也叫逻辑CPU数
  • 超线程:HT,Hyper-Threading,超线程技术就是让一个核模拟出两个核的技术性能
  • 物理CPU:即主板上插了多少个的CPU芯片
  • 虚拟CPU:假的、虚拟技术实现的CPU,相似VMWare虚拟机中的CPU

疑惑:

逻辑核彷佛有些时候被翻译成逻辑处理器,而处理器一般被我理解为CPU,因此逻辑核,就是逻辑CPU吗? 但这种翻译真的会有点模糊不清容易形成误解。

线程和核的关系

  • 线程须要核执行,一个核在同一时间只能执行一条线程,这里的核指逻辑核
  • 决定同时执行线程数的是逻辑核
  • 逻辑核心多少个,就能够 “同时” 执行多少线程
总结

n个物理核,通常有2n个逻辑核,若是只能同时运行物理核数个线程(n),那超线程技术模拟出来的核有什么用? 何况不少CPU的商品也不标 “逻辑核数”,用的词是 “线程数”,意思应该就是逻辑核心多少个就能同时运行多少个线程(2n)

x核y线程(y比x大)是什么意思

CPU商品说的2核4线程,指2个物理核,4个逻辑核。4线程就是4个逻辑核的意思

进程和线程

进程是操做系统层面的概念,线程是CPU层面的东西,CPU真正执行的是线程而不是进程
进程是是静态的概念,是一些资源的集合,好比进程有本身的内存而线程是动态的概念,进程能够有多个线程,这些线程共享同一份进程的资源多进程,目前多核的状况下,能够作到多个进程同时执行

  • 固然也就能够作到多个线程同时执行。可是单核的CPU没法作到 “同时”执行进程。此外进程是必定有端口号吗? 不必定,没网络暴露的就没有。但是肯定有进程号就对了

并发和并行

并发(concurrency)和并行(parallelism)
  • 并行是说物理上的 “同时” 被执行
  • 并发是一种程序设计,可以让多个任务在逻辑上交织执行

并发设计的程序,能够启动n个线程,好比2个,而后交给2个核,这时两个线程就是并行执行的(“同时”);这两个线程也能够被1个核 “交替” 执行。

不少时候,会认为并行就是真的同时执行,而并发就是交替执行,这是通常的理解,可是并发真正含义是指设计的程序容许同时或交替执行,是一种程序设计方案

多CPU 和 单CPU多核

估计是提升计算能力的两个方案,最终选择单CPU多核方案多一点

多CPU估计也有市场,也有些服务器是多CPU的

为何单CPU多核方案更胜一筹,主要是这个方案更好?
  • 多个核心之间通讯不须要走外部的总线,只须要走CPU内部总线,会快得多另外单CPU多核也成本较多CPU低,只须要一套芯片组,一套存储,多核之间经过芯片内部总线进行通讯,共享使用内存

  • 多核CPU缓存一致性协议有MSI、MESI(Illinois Protocol)、MOSI、Synapse、Firefly及 Dragon Protocol等。

多CPU的市场:多CPU适用于大计算量,对速度(时间)不(太)敏感的任务,好比一些工程建模,或者像SATI找外星人这种极端的,跑上几千年都不着急的。

单CPU单核

单CPU单核 跑多线程效率必定下降吗?

不必定:

  • 下降:若是多线程跑的都是CPU密集型任务,有可能会下降效率,由于仅有的一个核被用满了还要被调度来调度去浪费时间
  • 提高:若是多线程跑的都是IO密集型任务,有可能会提升,由于IO比CPU运行慢得多,来回切换线程,让这个核物尽其用。其调度损耗是值得的

举个例子:我有两家店(两个任务),这两家店隔了一条街道,我招了一个工人(一个CPU核),若是打理一家店铺就很忙得不可开交,你还让他打理两家店,来回在两家店跑来跑去,这反而下降了效率。若是这两个店铺都是处理1小时事情以后闲3个小时的,显然让他来回在两家店跑能榨干他的价值,能提升效率。

单CPU多核

常常会听到CPU都普及多核了,编程应该好好利用,其实确实是存在目前的编程没有充分利用多核CPU的性能,不过多是由于多线程的编程比较复杂的缘由。

单CPU多核,对于多线程确实提高做用大。不要钱的话确定是多核比单核CPU好的呀。

Linux中查看CPU和核信息

cat /proc/cpuinfo 

获得的信息应该是以逻辑核为单位的列表信息。每一个逻辑核的信息包括其归属的物理核ID(core id),以及其归属的物理CPU的ID(physical id)

列出物理CPU及各自的物理核数

cat /proc/cpuinfo | grep -E "physical id|cpu cores" | sed 'N;s/\n/ /' | sort | uniq

假设输出以下,则表示有2个物理CPU,第一个CPU有4个物理核,第二个CPU也是4个:

physical id : 0 cpu cores : 4
physical id : 1 cpu cores : 4

列出物理CPU及各自的逻辑核数

cat /proc/cpuinfo | grep "physical id" | sort | uniq -c

假设输出以下,则表示有两个物理CPU,各自包含8个逻辑核

8 physical id : 0
8 physical id : 1

查询CPU类型(虚拟、真实)

cat /proc/cpuinfo后查看model name,

例如:

Intel® Xeon® CPU E5-2682 v4 @ 2.50GHz 大概表示是真实CPU或者QEMU Virtual CPU version (cpu64-rhel6) 表示虚拟CPU

查询CPU是否支持超线程

  • 物理内核和物理CPU列表展示:两个物理CPU中各存在4个物理内核
physical id : 0 cpu cores : 4
physical id : 1 cpu cores : 4
  • 逻辑内核数码,和对应的物理CPU的id
8 physical id : 0
8 physical id : 1

能够得出第一个CPU(physical id是0)支持,由于其物理核4个逻辑核却又8个,第二个CPU(id是1)一样也支持。若是物理核和逻辑核的数量相等,不表明不支持,可能没打开超线程技术开关

top命令显示的核数是?

输入top按1能够展现出全部逻辑核,从Cpu0~CpuN,就是说有N+1个逻辑核。

是逻辑核数。

6、Java进程占用CPU超过100%
top查看进程的%CPU值,为何会CPU占用率超过100%

由于该进程占用超过一个核,占满2个核就是200%了。

/proc/cpuinfo文件解释

  • model name:是CPU的型号主频一些信息

例如Intel® Xeon® CPU E5-2682 v4 @ 2.50GHz或者QEMU Virtual CPU version (cpu64-rhel6)应该能大概看得出是虚拟CPU仍是真实的CPU


  • processor:指逻辑核ID,好比0,表示第1个逻辑核,不是零个逻辑核意思
  • physical id:物理CPU的ID,0表示第一个
  • core id:物理核的ID,0表示第一个
  • cpu cores:该物理CPU有多少个物理核
  • siblings该物理CPU有多少个逻辑核跟cpu cores不同表示开启了超线程技术,不然表示不支持该技术或者未开启

指令总结(重点学习,以后可能会用的上哦!)

  • 一、物理CPU数

cat /proc/cpuinfo | grep ‘physical id’ | uniq |wc -l

uniq是为了去掉多个逻辑核同属于一个物理CPU

  • 二、物理核数(全部CPU)

cat /proc/cpuinfo | grep ‘core id’ | uniq |wc -l

uniq为了去掉多个逻辑核属于同一个物理核

上述计算方式是计算全部CPU加起来有多少核,并非计算某个CPU有多少核

  • 三、物理核数(某个CPU)

cat /proc/cpuinfo 后查看cpu cores,该值记录了对应的物理CPU(以该条目中的physical id标识)有多少个物理核。

  • 四、逻辑核数(全部CPU)

逻辑核数,有些地方会逻辑CPU数

cat /proc/cpuinfo | grep ‘processor’ | wc -l

  • 五、逻辑核数(某个CPU)

cat /proc/cpuinfo后查看siblings,该值记录了对应的物理CPU(以该条目中的physical id标识做分组)有多少个逻辑核。

  • 六、查看是否支持超线程

cat /proc/cpuinfo后查看siblings和cpu cores不一致,说明该physical id的CPU支持超线程,若是一致,明不支持超线程,或者超线程未打开。

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

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

相关文章

html网页设计大学生作业成品——公益校园网站设计与实现(HTML+CSS+JavaScript)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

1.Spring概述(Spring官方文档总结)

目录 1.1jdk环境依赖 1.2 Spring介绍 1.3 Spring历史 1.4 设计理念 1.1 jdk环境依赖 从Spring Framework 5.1开始,Spring需要JDK 8 (Java SE 8),并提供对JDK 11 LTS的开箱即用支持。建议将Java SE 8 update 60作为Java 8的最低补丁版本,但…

由于找不到qt5core.dll,无法继续执行代码的问题

由于找不到qt5core.dll,无法继续执行代码的问题处理,其实和平常的dll缺失处理方法是差不多的 一. 下载qt5core.dll文件来解决 1.在百度搜索qt5core.dll这个dll文件,并且下载到自己的电脑 2.或者是直接在别人的电脑找qt5core.dll,然后拷贝到…

(附源码)ssm医护服务平台 毕业设计 260954

SSM医护服务平台 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设医护…

XFINIUM.PDF CROSS-PLATFORM BUNDLE 11.1.2

轻松将您的 PDF 应用程序移植到其他平台。 XFINIUM.PDF CROSS-PLATFORM BUNDLE 是一个用于跨平台 PDF 开发的库。在所有支持的平台(.NET、Windows Forms、Xamarin.Mac、ASP.NET Webforms 和 MVC、控制台应用程序、Windows 服务、Mono、Windows Presentation Foundat…

Python.02.语法进阶

目录 基本运算符 比较运算符 赋值运算符 多变量赋值 逻辑运算符 案例: 案例实现源码如下 三元运算符 条件语句 循环语句 1.计算0-100的求和 2.for循环数组求和 3.range定义一个1-100的奇数数组,for循环求出数组的和 4.while...else...语法 基本运算符 比较…

联通物联网卡激活方法

科技的发展日新月异,我们国家的发展战略也是支持高新科技公司的发展,所以越来越多的高新科技公司出现,但凡是高新科技公司,在设备的联网中,都会用到物联卡,所以物联卡的市场也愈发火爆,那么今天…

Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

pytorch复习笔记--nn.Embedding()的用法

目录 1--nn.Embedding()的用法 2--实例展示: 3--注意的问题 1--nn.Embedding()的用法 import torch.nn as nnembedding nn.Embedding(num_embeddings 10, embedding_dim 256) nn.Embedding()产生一个权重矩阵weight,其shape为(num_em…

图解:Go Mutext

Mutex 可能处于两种不同的模式:正常模式和饥饿模式。 正常模式下获取Mutex 在正常模式下,新来的G会尝试自旋获取锁,如果自旋获取失败,则会按照FIFO的顺序排队获取锁。 当Mutex被释放,会唤醒等待队列中第一个等待者G&…

[附源码]计算机毕业设计求职招聘网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring框架的介绍、工厂设计模式以及Spring环境的搭建

spring崇尚:不重复的造轮子 二、工厂设计模式 工厂设计模式:工厂生产对象(配置文件properties反射) Spring创建对象的实现原理: 根据配置文件的id得到对应的class属性值,根据反射,通过类全路径创建对象; 通过配置文件,通过工厂设计模式,有反射动态创…

matlab knn方法快速实现,手把手教学

目录介绍话不多说,进入实战注意事项KNN算法的优势和劣势介绍 1968年,Cover和Hart提出K近邻算法。该算法既可以用于回归也可以用于分类,其用于分类时其输入为实例的特征向量,输出为实例的类别。假设给定一个训练数据集&#xff0c…

PsiQuantum宣布在容错量子计算架构方面取得新突破

(图片来源:网络) 12月2日,PsiQuantum宣布了一项突破性技术,该技术将使编译应用程序在运行时效率提高约50倍。可以更有效地实现容错量子计算。 该技术专门针对容错量子计算机的算法,而不是非容错的NISQ系统。…

linux倒序查看占用cpu或内存最多的进程

一、获取当前系统占用CPU最高的前10个进程 命令:ps aux|head -1;ps aux|sort -rn -k3|head -10 该命令组合由2条独立的命令组成: ps aux|head -1:这一句是为了获取标题(USER PID %CPU %MEN VSZ RSS TTY STAT START TIME COMMAND…

儿童学生护眼台灯哪个牌子好?双十二儿童护眼台灯精选

我国儿童以及青少年的近视人数迅速增加,主要是不注意用眼时间,不良好的照明光线,拥有一个明亮舒适的光线环境,能大大减少近视概率,推荐合适的儿童护眼台灯给大家。 TOP1:南卡护眼台灯L1 推荐指数&#xf…

每天一个面试题:ThreadLocal底层原理和实现Demo(12.6.2022)

ThreadLocal底层原理和实现Demo每天一个面试题:ThreadLocal实现ThreadLocal的DemoThreadLocal底层原理为什么ThreadLocalMap的key设计为弱引用今天开始一个新专栏:每天一个面试题系列 也没有拿到令人心动的offer,看来自己学习方式和能力还是差…

霸榜!这本《程序员如何向架构师转型》在Github已持续置顶两月

前言 企业架构在过去十年中取得了长足的进步。随着越来越多新技术出现,充分利用这些因素来将企业架构创建得更好十分重要。通过将新技术集成到企业架构中,即使在困难时期,也能取得丰硕的成果。现代企业架构师的 5 个特征: 1. IT…

PyQt利用QScrollArea+QGridLayout制作一个滑动的Grid布局(QT Designer)

目录前言制作ui文件推送结语前言 有需求需要做一个滑动的Grid布局结构,网上找了很多的文章都是介绍直接用代码去生成的,没有看到用QT Designer做好后再怎么处理,这里研究了一下,以作记录和参考 制作ui文件 新建一个MainWindow 我…

本周推荐 | 基于 canvas 实现 H5 丝滑看图体验

推荐语:随着机器算力及性能的提升,基于原生Web体系的富交互体验也可以媲美原生,本文作者通过Canvas Web手势从零实现了大图浏览的交互效果,并在体验上不输Native,是一次不错的技术尝试,欢迎阅读。——大淘…