当前位置: 首页 > news >正文

基于ssh架构网站开发免费搭建服务器

基于ssh架构网站开发,免费搭建服务器,软件商城官网,网站制作怎么自己做分析&回答 Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…

分析&回答

Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 = 8个。具体参见下图:

代码示例:

public class CacheLine {private static class T {public volatile long x = 0L;//long类型占据8个字节}public static T[]  arr = new T[2];static {arr[0] = new T();arr[1] = new T();//两个数组紧挨着保证在内存中也是挨在一起的}public static void main(String[] args) throws Exception{Thread t1 = new Thread(() -> {for (long i = 0; i<10000000L; i++) {arr[0].x = i;//修改一千万次}});Thread t2 = new Thread(() -> {for (long i = 0; i<10000000L; i++) {arr[1].x = i;//修改一千万次}});final long start = System.currentTimeMillis();t1.start();t2.start();t1.join();//让t1线程先执行完t2.join();//让t2线程执行完System.out.println(System.currentTimeMillis() - start);//join 保证主线程的这段代码最后执行}
}
复制代码

执行结果为 300ms左右
上面代码中 arr[0] 和 arr[1]会在同一个cache line中,而每个cache line 是cpu 读入的最基本单位,在我们使用vaolatile 之后线程t1对x的1000000万次修改都要刷新内存通知t2,而同样t2对x的修改也要告诉t1。这样就会存在频繁的cache line 和内存的刷新读取。
如果我们将 对x的修饰的valitile去掉执行结果为10ms左右\

使用缓存行对其的方式代码示例:

public class CacheLine {private static class parent {public volatile long p1,p2,p3,p4,p5,p6,p7;//创建七个long 基本数据类型的成员变量占据56个字节}private static class T extends parent{public volatile  long x = 0L;//long类型占据8个字节}public static T[]  arr = new T[2];static {arr[0] = new T();arr[1] = new T();//两个数组紧挨着保证在内存中也是挨在一起的}public static void main(String[] args) throws Exception{Thread t1 = new Thread(() -> {for (long i = 0; i<10000000L; i++) {arr[0].x = i;//修改一千万次}});Thread t2 = new Thread(() -> {for (long i = 0; i<10000000L; i++) {arr[1].x = i;//修改一千万次}});final long start = System.currentTimeMillis();t1.start();t2.start();t1.join();//让t1线程先执行完t2.join();//让t2线程执行完System.out.println(System.currentTimeMillis() - start);//join 保证主线程的这段代码最后执行}
}
复制代码

执行结果为 100ms左右
现成t1一次读入x 包括p1p2p3p4p5p6p7的所有变量64个字节刚好占据一个缓存行,线程t2 也是如此,所以他们对变量x的修改都不用刷新内存通知对方提高了性能。
为什么这里不包括对象头的那部分呢,因为对相头不是使用的部分,不会读入缓存,我们用到的只是成员变量
总结为cpu对于内存的读入到缓存的数据是按照缓存行的大小(64k)来读取的。

反思&扩展

cache 是为了进一步提升计算机性能引入的存储结构,cache和内存的最小的传输单位是cache line,因为每个物理core有自己独享的L1、L2 cache,并且一个cache line可能存在多个cache中,所以就出现了MESI协议保证cache line的一致性。 进而又引入了cache line的伪共享的问题,为了进一步降低cache line伪共享所带来的的消耗,我们应该尽量避免多个线程同时修改的不同变量在同一个cache line中。虽然真实业务场景中,cache line的消耗占比可能会被弱化很多,但是追求极致的程序猿们,又怎么能放过这样一个无意义的消耗呢!

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

http://www.yayakq.cn/news/124851/

相关文章:

  • 自己如何建设个网站福建省漳州市建设局网站
  • 网站建设茂名微信开发网站建设程序
  • 黄岩做网站的公司云服务器建立多个网站
  • 如何提升网站的转化率怎么自己做一个网页链接
  • 网站备案号 查询设计制作公益广告牌教案
  • 做网站和app多少费用做ppt卖给网站
  • 网站优化需求北京完美建设有限公司网站
  • 佛山网站建设 骏域网站建设及推广的书
  • xampp做网站网页视频下载软件哪个好
  • 泰安网站建设推荐太原网站建设哪家强
  • 站长统计入口网站的宣传推广方式
  • 长春做网站 长春万网如何选择大连网站建设
  • 网站建设开发环境英文外贸商城网站设计
  • 凡科网站做网站多少钱抚州南城网站建设
  • 上海网站建设公司官网wordpress 菜单两列显示不出来
  • 网站的结构与布局优化设计诸暨北京网站制作公司有哪些
  • 跨境电商网站模板南宁做网约车怎么样
  • 网站主页用ps做一级消防工程师考试大纲
  • 松江区环保局网站建设项目备案网站建设的常用技术有哪些
  • 宁夏银川做网站的公司有哪些渠道推广代理
  • dz网站标题福建省建设干部培训中心网站
  • 做网站公司销售开场白saas小程序开发
  • 重庆网站seo建设哪家好网站开发课题研究背景
  • 珠海建站模板源码用wordpress做聊天
  • 成立一个网站需要多少钱专业制作网站用哪些软件
  • 网站备案号格式说明书2022近期时事热点素材摘抄
  • 网站建设属于什么类的采购内蒙古建设工程造价信息网官方网站
  • 网站建设申请报告岳阳县住房和城乡建设局网站
  • cgi做的网站seo资源网站 排名
  • 网站建设应注意什么问题商城网站开发文档