计算机组成

在这里插入图片描述

1、计算机的核心是cpu和内存。每次执行一个程序时操作系统从磁盘拿到相应的程序,放到内存中,这时程序和为他分配的内存以及其他资源统称为一个进程。cpu执行时从进程中拿指令,把指令地址放到pc中,根据指令地址把具体数据放到寄存器中,alu计算寄存器中的数据,然后cpu把计算好的结果写回到内存中去。当cpu同时处理多线程时,会把原来pc中的指令地址和寄存器中的数据单独存起来,然后把新的指令地址和数据放到pc和寄存器中,由alu计算,所谓的线程切换就是不断的把不同的数据和地址放入到寄存器和pc中,alu不断的处理不同的数据,直到处理完返回给内存

2、超线程:指的是cpu一个核中一个alu对应多组pc和寄存器,每次线程切换的时候无需把数据保存起来再放入新的数据,只要让alu处理不同的寄存器中的数据便可,所以超线程快。一般一个核中最多两组,超线程并不会让效率提升一倍,因为alu就一个。常见的四核八线程cpu

3、cache line缓存行
在这里插入图片描述
cpu每次处理数据时先从寄存器中取,没有依次往上找,L1、L2、L3最后内存,然后从内存中依次往L3、L2、L1、寄存器中放。根据局部性原理每次从内存中取数据都是按块读,也就是把要用到的数据所在的内存块都读出来,依次放入到各个缓存和寄存器中。每个内存块叫cache line,大小为64字节

4、共享:L1和L2是只能给一个cpu进行共享,但是L3是可以给同一个槽内的cpu共享,而主内存,是可以给所有的cpu共享,这就是内存的共享

5、伪共享:加了volatile后,如果cpu1上面的线程更新了变量X,根据MESI协议,那么变量X对应的所有缓存行都会失效,这个时候如果cpu2中的线程进行读取变量Y,发现缓存行失效,就会按照缓存查找策略,往上查找,如果cpu1对应的线程更新变量X后又访问了变量X,那么左侧的L1、L2和槽内的L3 缓存行都会得到生效。这个时候cpu2线程可以在L3 Cache 中得到生效的数据,否则的话(即cpu1对应的线程更新X后没有访问X)cpu2的线程就只能从主内存中获取数据,对性能就会造成很大的影响,这就是伪共享。如果不加volatile,cpu2中的线程依然从自己的寄存器中拿原来的缓存行,但如果两个cpu中的线程修改的是同一个值这时就不能保证及时更新了

6、缓存行对齐:
在这里插入图片描述
cursor无论跟前面7个组合还是跟后面七个组合都正好是一个cache line(64字节)。这样每次改动cursor时其余线程就不会因为volatile的原因而被迫更新相关缓存行。提高了效率。这也是disruptor底层优化的一个方法

7、字节:byte。字(位、比特):bit。1字节占8位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一梦无痕bzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值