编程内功心法「底层原理系列」 底层架构原理,分析CPU处理器鲜为人知的那些秘密
前提概要
所谓,知彼知己百战不殆,针对于计算机的优化技术来讲,最底层也不过是针对于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支持超线程,若是一致,明不支持超线程,或者超线程未打开。
编程内功心法「底层原理系列」 底层架构原理,分析CPU处理器鲜为人知的那些秘密相关推荐
- 「性能优化系列」APP内存优化理论与实践
当一个应用同时运行越来越多的任务以及复杂的业务,Android系统的内存管理机制已经无法满足内存的释放与回收,为了应用的稳定性与性能,去控制内存的创建和回收就成为了一个重要的命题. 本篇文章主要涉及内 ...
- 「真香系列」新物种首发亮相 聚划算爆款孵化玩法升级
从普通商品到优质好物,差的便是那一句"真香". 2022聚划算99划算节,聚划算首发「真香系列」,为消费者精选了一批价格香.品质香.服务香的「十三香」好物.不过,聚划算的" ...
- 「想法题系列」逗比三角形-二分
传送门:「想法题系列」逗比三角形-hzwer 题解 因为限制了盒子的宽,所以贪心让每个三角形尽量高(即让最短边紧贴盒子底面所在直线). 考虑把每个三角形竖着剖分成宽为 d d d的矩形. 将所有矩形降 ...
- 「春招系列」30张图理解HTTP在面试中所有会出现的题
前言 又是一年金三银四,春招与跳槽热闹的开展着,而在面试过程中,HTTP 被提问的概率还是非常高的. 我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是 ...
- 「知其所以然」前端技术原理
文章目录 前言 一.Ajax原理 二.Jsonp原理 三.Cors原理 四.Axios原理 五.Webpack原理 前言 前端技术原理. 一.Ajax原理 [1]浏览器通过Javascript的方式, ...
- 「BATJ面试系列」并发编程
作为一个合格的Java程序员,必须要对并发编程有一个深层次的了解,在很多互联网企业都会重点考察这一块.可能很多工作3年以上的Java程序员对于这一领域几乎没有太多研究.所以在接下来内容中,我会将并发编 ...
- 【深入浅出Spring原理及实战】「开发实战系列」带你看看那些可能你还不知道的Spring特殊技巧和想不到的招数
前提介绍 本文主要介绍相关Spring框架的一些新特性问题机制,包含了一些特定注解方面的认识. @Lazy可以延迟依赖注入 @Lazy注解修饰在类层面! @Lazy @Service public c ...
- 库卡机器人是s7编程_「西门子1200PLC教程」19.S7-1200入门实例
头条号私信回复1,可免费获取海量资源下载链接 本文任务:电动机启保停控制练习 按下瞬时启动按钮I0.6,电动机Q0.0启动: 按下瞬时停止按钮I0.7,电动机Q0.0停止. 目录 1.组态设备 2.编 ...
- stm32捕获占空比_「话说定时器系列」之六:STM32定时器输入捕获话题
STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...
最新文章
- “未来已来,共赢未来!” -- 我眼中的Citrix Summit 2017 - Part 2
- 算法----- 下一个更大元素 I
- cmd中net start mysql发生系统错误5
- Swoole 自定义项目初始化事件处理的实现
- QT的QStringList类的使用
- 参加腾讯DevDays是一种什么样的感受?
- Angular 内容投影 II
- fit_transform和transform的区别
- 动手学servlet(四) cookie和session
- Python中类与对象的关系
- strust2 和 hibernate的整合------登录的实现
- WebRTC学习与DEMO资源一览
- 【Word】快速插入参考文献
- python应用学习(三)——pyttsx3用四行代码让python说话!
- 告别无休止的甩锅,开发和运维如何高效合作
- IONIC4 苹果登录-Sign In With Apple Id
- Python绘图实例32:矩形螺旋线绘制
- 百数谐韵咏物千字文全文释义
- html 代码实现一些符号,大于号、小于号、商标等
- 病毒—Win32/Gamarue
热门文章
- <!DOCTYPE> 的作用
- 使用普中科技ESV2.0开发板控制步进电机
- 旗舰版ndows7bios设置,windows7旗舰版怎样设置embios/em怎样设置emU盘
- 计算机怎么打开隐藏的项目,怎样打开隐藏文件 详细步骤讲解【图文教程】
- NFS+mount挂载
- java jxl poi_java操作excel——jxl和poi比较
- 关于word里空格输入的小技巧
- 一个电子发票开票平台的系统架构设计(01)
- jquery-confirm使用方法
- lan和adsl是什么信号_宽带(ADSL)和宽带(LAN)都分别是什么意思??