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

弱内存模型和强内存模型架构(Weak/Strong Memory Model)

弱内存模型和强内存模型架构(Weak/Strong Memory Model)

**强/弱内存模型(Strong/Weak Memory Model)**是一个非常核心的计算机体系结构概念,尤其对编写底层并发代码(如操作系统、驱动、无锁数据结构)至关重要。

核心摘要

这两种模型定义了处理器为了提升性能而对内存操作(读/写)进行重排序的自由度

  • 强内存模型:规则严格。处理器保证指令执行的顺序与程序代码编写的顺序高度一致。重排序较少,对程序员更友好。
  • 弱内存模型:规则宽松。处理器为了性能,会广泛地重排内存操作的顺序。程序的最终结果正确性需要程序员通过内存屏障来显式地保证。

你可以把它想象成交通规则:

  • 强模型:像严格的交警,要求车辆几乎必须按道行驶,顺序前进。
  • 弱模型:像繁忙的交叉路口,车辆可以见缝插针地行驶,但需要司机自己(程序员)设置红绿灯(内存屏障)来避免事故。

1. 强内存模型

核心特征:处理器保证,对于任何一个CPU核心来说,它自己对内存的操作顺序,与其他CPU核心观察到的这个顺序是高度一致的。

代表架构:经典的 x86x86-64 架构是(相对)强内存模型的代表。SPARC 的 TSO (Total Store Order) 模式也是强模型。

它做了什么保证?
在 x86 上,只有一种重排序是被允许的:

  1. StoreLoad 重排:一个写操作之后的一个读操作可能会被重排到写操作之前。
    • 代码顺序:Write A -> Read B
    • 可能的重排:Read B -> Write A

它保证了不会发生什么?(这对程序员非常重要)

  1. 不会发生 StoreStore 重排:两个写操作 Write A -> Write B,其他核心保证会先看到 A 被更新,然后才看到 B 被更新。
  2. 不会发生 LoadLoad 重排:两个读操作 Read A -> Read B,处理器保证不会先读 B 再读 A(尽管它可能会预读,但顺序不会乱)。
  3. 不会发生 LoadStore 重排:一个读操作之后的一个写操作 Read A -> Write B,顺序不会乱。

对程序员的意义
在 x86 上编写多线程程序相对更“省心”一些。例如,在一个线程中按照 A = 1; B = 2; 的顺序写入数据,另一个线程看到 B 变成 2 时,一定也能看到 A 已经变成了 1。这是因为 StoreStore 重排被禁止了。


2. 弱内存模型

核心特征:处理器为了极致性能,几乎允许任何形式的内存操作重排序(StoreStore, LoadLoad, LoadStore, StoreLoad),除非程序员显式地使用内存屏障来禁止

代表架构ARM (包括 ARM64/AArch64)、PowerPCRISC-VMIPS 都是弱内存模型(通常称为 Relaxed Memory Model)。

它几乎什么都可能发生
处理器和编译器可以自由地重新排列指令顺序,只要在单线程上下文中最终结果正确。这意味着:

  • Write A -> Write B 可能被重排为 Write B -> Write A
  • Read A -> Read B 可能被重排为 Read B -> Read A
  • Read A -&g
http://www.dtcms.com/a/358866.html

相关文章:

  • stack queue的实现 deque的底层结构 priority_queue的实现
  • easy-http类似feign的轻量级http客户端工具
  • C++三方服务异步拉起
  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • K8s卷机制:数据持久化与共享
  • 当“循环经济”遇上“小程序”,旧物回收正迎来“智慧”升级
  • 奥普新汽车声学测试方案书
  • 谷歌 “Nano Banana“ 深度解析:AI 图像的未来是精准编辑,而非从零生成
  • 构建现代化的“历史上的今天“网站:从API到精美UI的全栈实践
  • jumpserver
  • 字数统计器和文本AI处理,非常好用
  • 【Leetcode】17、电话号码的字母组合
  • MYSQL速通(3/5)
  • Agno - 轻量级Python多智能体系统框架
  • Python可视化与交互-matplotlib库
  • 后台技术方案设计经验之谈
  • C读写xlsx库xlsxio的编译和测试
  • 第2.3节:AI大模型之Claude系列(Anthropic)
  • k8s 定时任务需求模板
  • 直流无刷电机2
  • 【计算机408计算机网络】第四章:自底向上五层模型之网络层
  • Linux IO复用
  • DeepConf:基于置信度提高LLM表现
  • Tomcat 企业级运维实战系列(五):Tomcat 优化和安全加固
  • Tiptrans转运 | 免费5国转运地址
  • Java中不太常见的语法-总结
  • static静态文件和requests请求对象
  • 内网穿透系列十二:一款基于 HTTP 传输和 SSH 加密保护的内网穿透工具 Chisel ,具备抗干扰、稳定、安全特性
  • PromptPerfect-将你的提示词提升到完美
  • 【Java基础知识 19】继承