硬件结构
1. 冯诺依曼模型
- CPU
通⽤寄存器
程序计数器
指令寄存器
- 总线
地址总线
数据总线
控制总线
2. 32位和64位对比
- 如果计算的数额不超过 32 位数字的情况下, 32 位和 64 位 CPU 之间没什么区别的,只有当计算超过 32 位数字的情况下, 64 位的优势才能体现出来
- 32 位 CPU 最⼤只能操作 4GB 内存,
- 32位操作系统可以运行在64位CPU上面吗?反过来?
如果32位指令在64位机器上执⾏,需要⼀套兼容机制,就可以做到兼容运⾏了
但是如果64位指令在32位机器上执⾏,就⽐较困难,因为 32 位的寄存器存不下64位的指令
32位操作系统、64位操作系统,其代表意义就是操作系统中程序的指令是多少位,⽐如64位操作系统,指令也就是64位,因此不能装在32位机器上
- 总之,硬件的64位和32位指的是CPU的位宽,软件的64位和32位指的是指令的位宽
3. CPU缓存
- L1缓存
L1 Cache 通常会分为「数据缓存」和「指令缓存」
CPU执行会读取L1缓存,通常是以Line的形式存储一个内存地址连续的数据。这涉及到连续数据读取通常效率高,以及伪共享的问题
- L2缓存
L1 Cache 和 L2 Cache 都是每个 CPU 核⼼独有的
- L3缓存
L3 Cache 是多个 CPU 核⼼共享的
- 程序执⾏时,会首先将内存中的数据加载到共享的 L3 Cache中,再加载到每个核⼼独有的 L2 Cache,最后进⼊到最快的 L1 Cache,之后才会被 CPU 读取
- 提高数据缓存的效率:就是采用数组存放连续读取的变量或值
- 提高指令缓存的效率:CPU的分⽀预测器 ,对于if~else做了很好的优化,但是连续的指令对于缓存来说可以预加载更多内容,提高执行效率。因此先排序再遍历效率大于先遍历再排序
- 提升多核CPU的缓存命中率:如果⼀个进程在不同核⼼来回切换,各个核⼼的缓存命中率就会受到影响,我们可以把线程绑定在某⼀个 CPU 核⼼上。Linux提供了API
4. 缓存一致性
- 写直达
如果数据已经在 Cache ⾥⾯,先将数据更新到 Cache ⾥⾯,再写⼊到内存⾥⾯
如果数据没有在 Cache ⾥⾯,
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
后端开发面试高频八股+算法 文章被收录于专栏
涵盖各大厂考官最爱问知识点,22年最新整理!