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

电大考试亿唐网不做网站做品牌佛山市公司网站建设平台

电大考试亿唐网不做网站做品牌,佛山市公司网站建设平台,html个人网站源码,wordpress需要伪静态吗写在前面好久没有写博客了#xff0c;一直在不断地探索响应式DDD#xff0c;又get到了很多新知识#xff0c;解惑了很多老问题#xff0c;最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture#xff0c;里面有一个术语Mechanical Sympathy#xff0c;姑且… 写在前面好久没有写博客了一直在不断地探索响应式DDD又get到了很多新知识解惑了很多老问题最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture里面有一个术语Mechanical Sympathy姑且翻译成软硬件协同编程Hardware and software working together in harmony很有感悟说的是要把编程与底层硬件协同起来这样对于开发低延迟、高并发的系统特别地重要为什么呢今天我们就来讲讲CPU的高速缓存。电脑的缓存系统电脑的缓存系统分了很多层级从外到内依次是主内存、三级高速缓存、二级高速缓存、一次高速缓存所以在我们的脑海里觉点磁盘的读写速度是很慢的而内存的读写速度确是快速的的确如此从上图磁盘和内存距离CPU的远近距离就看出来。这里先说明一个概念主内存被所有CPU共享三级缓存被同一个插槽内的CPU所共享单个CPU独享自己的一级、二级缓存即高速缓存。CPU是真正做事情的地方它会先从高速缓存中去获取所需的数据如果找不到再去三级缓存中查找如果还是找不到最终就去会主内存查找如果每一次都这样来来回回地取数据那么无疑是非常耗时。如果能够把数据缓存到高速缓存中就好了这样不仅CPU第一次就可以直接从高速缓存中命中数据而且每个CPU都独占自己的高速缓存多线程下也不存在临界资源的问题这才是真正的低延迟但是这个地方对我们而言根本不透明肿么办探索高速缓存的构造我们先来看一张使用鲁大师检测的处理器信息截图如下从上图可以看到CPU高速缓存一、二级的存储单元为Line大小为64 bytes也就是说无论我们的数据大小是多少高速缓存都是以64 bytes为单位缓存数据比如一个8位的long类型数组即使只有第一位有数据每次高速缓存加载数据的时候都会顺带把后面7位数据也一起加载因为数组内元素的内存地址是连续的这就是底层硬件CPU的工作机制所以我们要利用这个天然的优势让数据独占整个缓存行这样CPU命中的缓存行中就一定有我们的数据。示例使用不同的线程数对一个long类型的数值计数500亿次。备注统计分析图表和总结在最后。1. 一般的实现方式大多数程序员都会这样子构造数据老铁没毛病。代码///// summary///// CPU伪共享高速缓存行条目(伪共享)///// /summarypublic class FalseSharingCacheLineEntry{    public long Value 0L; }单线程平均响应时间 1508.56 毫秒。双线程平均响应时间 4460.40 毫秒。三线程平均响应时间 7719.02 毫秒。四线程平均响应时间 10404.30 毫秒。2. 独占缓存行直接命中高速缓存。2.1 直接填充代码/// summary/// CPU高速缓存行条目(直接填充)/// /summarypublic class CacheLineEntry{      protected long P1, P2, P3, P4, P5, P6, P7;     public long Value 0L;        protected long P9, P10, P11, P12, P13, P14, P15; }为了保证高速缓存行中一定有我们的数据所以前后都填充7个long。单线程平均响应时间 1516.33 毫秒。双线程平均响应时间 1529.97 毫秒。三线程平均响应时间 1563.65 毫秒。四线程平均响应时间 1616.12 毫秒。2.2 内存布局填充作为一个C#程序员必须写出优雅的代码可以使用StructLayout、FieldOffset来控制class、struct的内存布局。备注就是上面直接填充的优雅实现方式而已。代码/// summary/// CPU高速缓存行条目(控制内存布局)/// /summary[StructLayout(LayoutKind.Explicit, Size 120)]public class CacheLineEntryOne{[FieldOffset(56)]    private long _value;    public long Value{        get _value;        set _value value;} }单线程平均响应时间 2008.12 毫秒。双线程平均响应时间 2046.33 毫秒。三线程平均响应时间 2081.75 毫秒。四线程平均响应时间 2163.092 毫秒。3. 统计分析上面的图表已经一目了然了吧一般实现方式的持续时间随线程数呈线性增长多线程下表现的非常糟糕而通过直接、内存布局方式填充了数据后响应时间与线程数的多少没有无关达到了真正的低延迟。其中直接填充数据的方式效率最高内存布局方式填充次之在四线程的情况下一般实现方式持续时间为10.4秒多直接填充数据的方式为1.6秒内存布局填充方式为2.2秒延迟还是比较明显为什么会有这么大的差距呢刨根问底在C#下一个long类型占8 byte对于一般的实现方式在多线程的情况下隶属于每个独立线程的数据会共用同一个缓存行所以只要有一个线程更新了缓存行的数据那么整个缓存行就自动失效这样就导致CPU永远无法直接从高速缓存中命中数据每次都要经过一、二、三级缓存到主内存中重新获取数据时间就是被浪费在了这样的来来回回中。而对数据进行填充后隶属于每个独立线程的数据不仅被缓存到了CPU的高速缓存中而且每个数据都独占整个缓存行其他的线程更新数据并不会导致自己的缓存行失效所以每次CPU都可以直接命中不管是单线程也好还是多线程也好只要线程数小于等于CPU的核数都和单线程一样的快速正如我们经常在一些性能测试软件都会看到的建议线程数最好小于等于CPU核数最多为CPU核数的两倍这样压测的结果才是比较准确的现在明白了吧。最后来看一下大师们总结的未命中缓存的测试结果从CPU到大约需要的 CPU 周期大约需要的时间主存约60-80纳秒QPI 总线传输 (between sockets, not drawn)约20nsL3 cache约40-45 cycles约15nsL2 cache约10 cycles,约3nsL1 cache约3-4 cycles约1ns寄存器寄存器源码参考https://github.com/justmine66/MDA/blob/master/tests/MDA.Test.Disruptor/FalseSharingTest.cs延伸阅读Magic cache line paddingThe LMAX Architecture补充感谢 firstrose同学主动测试后的提醒大家应该向他学习带着疑惑看博客不明白的自己动手测试。对于内存布局填充方式去掉属性后经过测试性能与直接填充方式几乎无差别了不过本示例代码仅仅作为一个测试参考主要目的是给大家布道如何利用CPU高速缓存工作机制通过缓存行的填充来避免假共享从而写出真正低延迟的代码。/// summary/// CPU高速缓存行条目(控制内存布局)/// /summary[StructLayout(LayoutKind.Explicit, Size 120)]public class CacheLineEntryOne{[FieldOffset(56)]    public long Value; }总结编写单、多线程下表现都相同的代码历来都是非常困难的需要不断地从深度、广度上积累知识学无止境无痴迷不成功希望大家能有所收获。原文地址:https://www.cnblogs.com/justmine/p/9696160.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.yutouwan.com/news/358053/

相关文章:

  • wordpress 外贸网站千图网免费素材图库背景
  • 佛山专门做网站设计怎样做成品网站制作公司
  • 合肥百度团购网站建设微信开发者模式
  • 徐州网站开发信息社团网站建设
  • 高校网站建设意义杭州seo管理
  • wordpress小说站主题河南工程建设信息网站
  • 简单商业网站模板网站建设默认字体
  • v9做的网站被攻击链接吧跳转如何建设网站安全
  • 如何将vs做的网站备份出来舟山公司网站制作
  • 漯河网站制作本地工程招标网
  • 新公司成立如何建设网站投资公司网站设计
  • 企业官网怎么和别的网站做链接廊坊百度推广seo
  • 给我推荐一个网站中国最顶尖的广告设计公司
  • 深圳建网站的网络公司最近一周热点新闻
  • 专业开发手机网站建设模拟网站效果
  • 浙江省建设注册管理中心网站做外贸怎么做
  • 美工做网站尺寸多少钱优化方案生物必修一答案
  • 品牌标志logo大全东莞seo网络营销策划
  • 网站优化推广公司龙岩北京网站建设
  • 做数学题赚钱的网站优秀品牌策划方案
  • 吧网站做软件的软件remix做歌网站
  • 怎么在windows做网站建设厅安检局网站
  • 上饶网站开发 app开发软件开发公司网站设计
  • 王建设的网站企业建设企业网站的好处
  • 计算机网站建设和维护计算机应用是做什么的
  • 大型租车门户网站商业版源码网站建设 保密
  • 网站制作流程 优帮云亚马逊网站开发设计
  • 58同城北京网站建设wordpress 自定义类型
  • 建立个公司网站门户网站技术方案
  • 毕业设计网站成品百度爱采购官网首页