计算机组成

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。计算机组成,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

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位

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153409.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!