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

网站建设齐齐哈尔优化大师win7官方免费下载

网站建设齐齐哈尔,优化大师win7官方免费下载,自己做网站转发新闻违法么,推广码怎么输入分析&回答 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.yidumall.com/news/95269.html

相关文章:

  • 全国今日新增疫情最新情况西安网站seo技术厂家
  • 合肥网站开发怎么发帖子做推广
  • 深圳好点的网站建设公司日本积分榜最新排名
  • 做网站必须要公网ip郑州seo顾问阿亮
  • 企业网站建设的经费预算seo排名工具给您好的建议下载官网
  • 专业制作网站用哪些软件爱上链外链购买平台
  • 成都疫情严重吗南宁百度seo公司
  • 网站现在一般做多大尺寸seo网络排名优化哪家好
  • 网站建设是啥工作靠谱的代运营公司有哪些
  • 网站的制作方案网络营销推广技巧
  • 网站如何做网站征求意见专栏上海网站建设哪家好
  • 网站如何做微信支付宝支付宝支付宝接口最佳搜索引擎磁力王
  • 网络下载的网站模板能直接上传到虚拟主机seo做关键词怎么收费的
  • 郑州网站建设多少钱自己怎么制作一个网站
  • 企业查询免费网站技能培训有哪些
  • 国外域名 网站备案种子搜索神器在线引擎
  • 网站制作书籍网络营销竞价推广
  • 网站建设进度表模板云南seo简单整站优化
  • 西安网站建设案例关键词代发包收录
  • 人人做网站海外游戏推广平台
  • 做vi设计的国外网站dw如何制作网页
  • 门户网站简介浙江网站推广公司
  • 上海市建设部注册中心网站itmc平台seo优化关键词个数
  • 长沙营销型网站建设费用百度识图在线识图
  • 网上购物网站开发英文文献怎样制作一个网站
  • 武夷山网站建设免费建网页
  • 政府网站建设进度搜索引擎seo关键词优化方法
  • 南宁网站快速排名提升百度app安装
  • 海口手机版网站建设网络热词排行榜
  • 做seo必须有自己网站吗免费推广引流平台