- 一个exe文件运行到内存中就是一条条的指令,CPU将指令从内存中读取到寄存器中进行执行,每条指令结束后将结果返回,PC程序计数器用于存储下一条指令的地址
- 寄存器(L0)下是高速缓存,总共有L1、L2、L3,然后是主存L4、磁盘L5、远程文件存储L6
- 内存相较于cpu是慢动作,所以之间加了很多级别的缓存
- 一个cpu一个核包含ALU、Registers、PC和多层缓存
- 超线程:一个ALU对应多个PC|Registers,线程切换速度变快
- 程序读取数据首先通过寄存器,没有再找旗下的多级缓存,最后才到主存,且读取的时候是一块一块地读取的,一块64个字节,我们称单独的一块为cache line
- cpu级别的数据一致性是通过cache line来作为基本单位的,现比如x、y在同一个cache line中(比如一个数组中相邻的两个同类型的对象),如果一个核修改了x(如果加了valitile)那么我就要通知另一个核中我已经修改了x,此时就需要同步,所以当x、y不在同一个cache line时就不需要同步了,如何让他们不在同一个cache line呢,人为添加一些多余的数据占满cache line的64个字节,这种写法叫做缓存行对齐
- 缓存行对齐可以参考disruptor
- MESI cache
- LinkedTransferQueue
java多线程(8) cpu与多线程
最新推荐文章于 2022-12-16 18:07:45 发布