96SEO 2026-02-19 23:40 0
。

为了权衡成本和速度#xff0c;计算机存储分了很多层次#xff0c;有寄存器、L1
速度快的存储硬件成本高、容量小速度慢的成本低、容量大。
为了权衡成本和速度计算机存储分了很多层次有寄存器、L1
。
因此增加缓存可以让整个存储系统的性能接近寄存器并且每字节的成本都接近内存所以缓存是存储体系结构的灵魂。
可能不相同。
从内存向缓存加载数据是按整个缓存行加载的一个缓存行和一个相同大小的内存块对应。
N)横向是组(Set)纵向是路(Way)。
每一个元素是缓存行(cache
首先定义一个行、列都与缓存路数相同的矩阵。
当访问某个路对应的缓存行时先将该路对应的所有行置为
缓存缺失就是缓存未命中需要把内存中数据加载到缓存所以运行速度会变慢。
ms。
除了第一次未命中缓存后面每次读写数据都能命中缓存。
调整上面的代码并运行
程序局部性就是读写内存数据时读写连续的内存空间目的是让缓存可以命中减少缓存缺失导致替换的开销。
当两个线程同时各自修改两个相邻的变量由于缓存是按缓存行来整体组织的当一个线程对缓存行中数据执行写操作时必须通知其他线程该缓存行失效导致另一个线程从缓存中读取其想修改的数据失败必须从内存重新加载导致性能下降。
ms是两个线程互相影响使对方的缓存行失效导致直接从内存读取数据。
解决办法是对上面代码做修改通过
b划分到两个不同的缓存行中不再互相使对方的缓存失效所以速度变快了。
修改后耗时181ms。
对缓存的修改不会立刻传播到内存只有当缓存行被替换时这些被修改的缓存行才会写回并覆盖内存中过时的数据。
缓存中任何一个字节的修改都会立刻穿透缓存直接传播到内存这种比较耗时。
每次缓存写入新的值该核心必须发起一次总线请求通知其他核心更新他们缓存中对应的值。
坏处当其他核心再次访问该缓存时发现缓存行已经失效必须从内存中重新载入最新的数据
好处多次写操作只需发一次总线事件第一次写已经将其他核心缓存行置为无效之后的写不必再更新状态这样可以有效地节省核心间总线带宽。
在写入数据前将数据读入缓存。
当缓存块中的数据在未来读写概率较高也就是程序空间局部性较好时写分配的效率较好。
在写入数据时直接将数据写入内存并不先将数据块读入缓存。
当数据块中的数据在未来使用的概率较低时写不分配性能较好。
MESI协议是基于失效的缓存一致性协议是支持写回缓存的最常用协议。
为了解决多个核心之间的数据传播问题提出了总线嗅探Bus
Snooping策略。
本质上就是把所有的读写请求都通过总线Bus广播给所有的核心然后让各个核心去嗅探这些请求再根据本地的状态进行响应。
它的名字来自四种状态修改Modified专有Exclusive共享Shared和无效Invalid。
修改Modified缓存行被某个处理器独占修改过并且与主存中的数据不同步。
只有该处理器可以访问这个缓存行其他处理器都不能访问。
专有Exclusive缓存行被某个处理器独占但没有被修改过与主存中的数据是一致的。
只有该处理器可以访问这个缓存行但如果其他处理器想要访问可以直接读取主存中的数据。
共享Shared缓存行可以被多个处理器同时读取但没有被修改过与主存中的数据是一致的。
多个处理器都可以同时访问这个缓存行。
无效Invalid缓存行的数据是无效的不能被使用。
如果某个处理器需要使用这个数据它必须从主存中重新读取。
如果数据在缓存中是无效的处理器会从主存中读取数据并将状态设置为共享或专有。
如果数据在缓存中是共享或专有的处理器可以直接读取缓存中的数据。
如果数据在缓存中是无效或共享的处理器会将数据从主存中读取并进行修改将状态设置为修改。
如果数据在缓存中是专有的处理器可以直接修改缓存中的数据并将状态改为修改。
编译器和处理器都必须遵守重排序规则。
在单处理器的情况下不需要任何额外的操作便能保持正确的顺序。
但是对于多处理器来说保证一致性通常需要增加内存屏障指令。
即使编译器可以优化掉字段的访问例如因为未使用加载到的值编译器仍然需要生成内存屏障就好像字段访问仍然存在一样可以单独将内存屏障优化掉。
与其缓存的交互以及它的写缓冲区持有等待刷新到内存的数据的存储和它的用于等待加载或推测执行指令的缓冲。
这些影响可能导致缓存、主内存和其他处理器之间的进一步交互。
之后的所有读操作load和写操作store执行完。
对于任何的处理器来说这通常都是最耗时的指令之一它的开销通常接近甚至超过原子操作指令。
大多数处理器还支持更细粒度的屏障指令。
为了解决上面问题引入了内存屏障屏障的作用是前边的读写操作未完成的情况下后面的读写操作不能发生。
这就是
提升了写性能但放弃了缓存的顺序一致性这种现象称为弱缓存一致性。
通常情况下多个
可以大幅提升程序的性能。
但在需要核间同步的情况下还是需要通过手动添加内存屏障来保证缓存一致性。
}这里使用的内存屏障是全屏障包括读写屏障过于严格了会导致性能下降所以有了细粒度的读屏障和写屏障。
也是一种内存屏障但它不是以读写来区分的而是像单行道一样只允许单向通行例如
前缀的指令时会去争抢全局锁拿到锁后其他线程的读取操作会被阻塞在释放锁之前会清空该线程的本地的
被写入变量后除了被其他线程持有锁以外的情况在任何时刻均有可能写回内存。
仅在乱序(out-of-order)处理器上有效因为等待写指令可以绕过读指令而
相对其他平台缓存一致性是最严格的读操作不会延后不会使读写重排那么最后只有
参数这个参数就是这里所说的内存模型对应缓存一致性模型其作用是对同一时间的读写操作进行排序一共定义了
memory_order_relaxed松散内存序只用来保证对原子对象的操作是原子的在不需要保证顺序时使用
memory_order_release释放操作在写入某原子对象时当前线程的任何前面的读写操作都不允许重排到这个操作的后面去并且当前线程的所有内存写入都在对同一个原子对象进行获取的其他线程可见通常与memory_order_acquire
memory_order_acquire获得操作在读取某原子对象时当前线程的任何后面的读写操作都不允许重排到这个操作的前面去并且其他线程在对同一个原子对象释放之前的所有内存写入都在当前线程可见
类似区别是它仅对依赖于该原子变量操作涉及的对象比如这个操作发生在原子变量
memory_order_acq_rel获得释放操作一个读‐修改‐写操作同时具有获得语义和释放语义即它前后的任何读写操作都不允许重排并且其他线程在对同一个原子对象释放之前的所有内存写入都在当前线程可见当前线程的所有内存写入都在对同一个原子对象进行获取的其他线程可见
memory_order_seq_cst顺序一致性语义对于读操作相当于获得对于写操作相当于释放对于读‐修改‐写操作相当于获得释放是所有原子操作的默认内存序并且会对所有使用此模型的原子操作建立一个全局顺序保证了多个原子变量的操作在所有线程里观察到的操作顺序相同当然它是最慢的同步模型。
帮你屏蔽了内部细节不用考虑内存屏障只要符合上面的使用规则就能得到想要的效果。
可能有时使用的模型粒度比较大会损耗性能当然还是使用各平台底层的内存屏障粒度更准确效率也会更高。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback