网站seo推广员招聘来个网站好人有好报
网站seo推广员招聘,来个网站好人有好报,公司做网站的优势,西宁市网站设计一、计算机内存
1.1、计算机硬件内存架构。 计算机CPU#xff08;central processing unit#xff09;和内存的交互是最频繁的#xff0c;内存是我们的高速缓存区。用户磁盘和CPU的交互#xff0c;而CPU运转速度越来越快#xff0c;磁盘远远跟不上CPU的读写速度…一、计算机内存
1.1、计算机硬件内存架构。 计算机CPUcentral processing unit和内存的交互是最频繁的内存是我们的高速缓存区。用户磁盘和CPU的交互而CPU运转速度越来越快磁盘远远跟不上CPU的读写速度才设计了内存用户缓存用户IO等待导致CPU的等待成本。但是随着CPU的发展内存的读写速度也远远跟不上CPU的读写速度因此为了解决这一纠纷CPU厂商在每颗CPU上加入了高速缓存用来缓解这种症状CPU与内存的交互如下图
速缓存读取数据和向其中写入数据当运算结束之后再将高速缓存中的数据刷新到主存当中。 同样我们知道单核CPU的主频不可能无限增长想要提升性能需要多个处理器协同工作Intel总裁贝瑞特单膝下跪事件标识着多核时代的到来。 基于高速缓存的存储交互很好的解决了处理器与内存之间的矛盾也引入了新的问题缓存一致性问题。在多处理器系统中每个处理器有自己的高速缓存而他们又共享同一块内存主存当多个处理器运算都涉及到同一块内存区域的时候就有可能出现缓存不一致的问题比如下面这段代码
ii1; 当线程执行这个语句时会先从主存当中读取i的值然后复制一份到高速缓存当中然后CPU执行指令对i进行加1操作然后将数据写入高速缓存最后将高速缓存中i最新的值刷新到主存当中。 这个代码在单线程中运行是没有任何问题的但是在多线程中运行就会有问题了。在多核CPU中每条线程可能运行于不同的CPU中因此每个线程运行时有自己的高速缓存对单核CPU来说其实也会出现这种问题只不过是以线程调度的形式来分别执行的。本文我们以多核CPU为例。 假设同时有2个线程执行这段代码假如初始时i的值为0那么我们希望两个线程执行完之后i的值变为2但是事实会是这样吗 可能存在下面一种情况初始时两个线程分别读取i的值存入各自所在的CPU的高速缓存当中然后线程1进行加1操作然后把i的最新值1写入到内存。此时线程2的高速缓存当中i的值还是0进行加1操作之后i的值为1然后线程2把i的值写入内存。 最终结果i的值是1而不是2这就是缓存一致性问题。通常称这种被多个线程访问的变量为共享变量。也就是说如果一个变量在多个CPU中都存在缓存一般在多线程编程时才会出现那么就可能存在缓存不一致的问题。
为了解决这一问题在硬件层面的解决办法有两种 ( 1 )通过在总线加LOCK#锁的方式。 在早期的CPU当中是通过在总线上加LOCK#锁的形式来解决缓存不一致的问题。因为CPU和其他部件进行通信都是通过总线来进行的如果对总线加LOCK#锁的话也就是说阻塞了其他CPU对其他部件访问如内存从而使得只能有一个CPU能使用这个变量的内存。 但是这种方式会有一个问题由于在锁住总线期间其他CPU无法访问内存导致效率低下。 ( 2 )通过缓存一致性协议。 需要各个处理器运行时都遵守一些协议在运行时将需要这些协议保存数据的一致性。协议包括MSI/MESI/MOSI/Synapse/Firely/DragonProtocol等。 最出名的就是Intel的MESI协议MESI协议保证了每个缓存中使用的共享变量的副本是一致的。它核心的思想是当CPU写数据时如果发现操作的变量是共享变量即在其他CPU中也存在该变量的副本会发出信号通知其他CPU将该变量的缓存行置为无效状态因此当其他CPU需要读取这个变量时发现自己缓存中缓存该变量的缓存行是无效的那么它就会从内存重新读取。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89359.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!