农业建设公司网站深圳企业专业网站建设

张小明 2026/1/15 1:24:19
农业建设公司网站,深圳企业专业网站建设,湖南省住房和城乡建设厅门户网站,爱南宁app下载官网前言#xff1a;并发之痛在多线程开发的领域#xff0c;我们常被“可见性”、“原子性”、“有序性”这三座大山压得喘不过气。你是否思考过#xff1a;为什么 volatile 能保证可见性却不能保证原子性#xff1f;为什么 i 在多线程下一定会出错#xff1f;硬件层面的 CPU …前言并发之痛在多线程开发的领域我们常被“可见性”、“原子性”、“有序性”这三座大山压得喘不过气。你是否思考过为什么volatile能保证可见性却不能保证原子性为什么i在多线程下一定会出错硬件层面的 CPU 缓存是如何一步步影响到我们写的 Java 代码的本文将带你从硬件的最底层出发一路向上穿透直达 JVM 的核心彻底拆解高并发的底层逻辑。一、 硬件基石CPU 缓存一致性 (MESI)1.1 为什么需要 CPU 缓存根据摩尔定律CPU 的频率提升极快但内存DRAM的访问速度提升缓慢。为了弥补这种“速度鸿沟”工程师引入了 L1/L2/L3 三级缓存。然而缓存的引入带来了缓存一致性问题当多个核心同时修改同一个变量时如何保证结果的正确性1.2 MESI 协议缓存行的“红绿灯”为了解决冲突Intel 等厂商引入了MESI 协议。它将缓存行的状态分为四种M (Modified)修改。本地已修改与内存不一致。E (Exclusive)独占。本地与内存一致其他核心无副本。S (Shared)共享。多个核心都有副本与内存一致。I (Invalid)无效。当前缓存数据已失效。深度思考仅仅靠 MESI 就够了吗答案是否定的。为了追求极致性能CPU 还引入了Store Buffer写缓冲区和Invalidate Queue无效队列这导致了指令重排序和内存可见性的延迟。二、 核心纽带Java 内存模型 (JMM)JMMJava Memory Model是一种抽象规范。它屏蔽了各种硬件和操作系统的内存访问差异让 Java 程序员实现“一次编写到处并发”。2.1 主内存与工作内存JMM 规定所有变量都存储在主内存Main Memory中。每条线程都有自己的工作内存Working Memory保存了该线程使用到的变量的主内存副本拷贝。2.2 八大原子操作JMM 定义了 8 种原子操作来完成主内存与工作内存的交互lock - read - load - use - assign - store - write - unlock。注意现代 JVM 已经将这些操作合并简化但理解它们的先后顺序对于理解synchronized的释放锁与获取锁语义至关重要。三、 指令重排序与 Happens-Before 原则3.1 为什么代码会乱序执行为了优化性能编译器和处理器会进行指令重排。但在多线程下这会导致致命问题。经典案例DCL 单例模式public class Singleton { private static volatile Singleton instance; // 必须加 volatile public static Singleton getInstance() { if (instance null) { synchronized (Singleton.class) { if (instance null) { instance new Singleton(); } } } return instance; } }如果没有volatileinstance new Singleton();可能被分解为分配内存设置引用指向内存地址未初始化对象初始化对象如果执行顺序是 1-2-3其他线程可能会拿到一个尚未初始化完成的对象。3.2 Happens-Before并发编程的基石JMM 提供了一套规则只要满足这些规则编译器就不能随意重排指令。程序次序规则单线程内代码书写顺序即执行顺序。管程锁定规则unlock必须发生在后面对同一个锁的lock之前。volatile 变量规则写一个volatile变量必须发生在后面对该变量的读之前。传递性如果 A HB BB HB C则 A HB C。四、 深度拆解 volatile从 Java 到汇编4.1 语义一保证可见性当一个变量被volatile修饰它会强制将工作内存的修改刷新到主内存并让其他核心的缓存行失效。4.2 语义二禁止指令重排JVM 通过插入内存屏障 (Memory Barrier)来实现。在每个 volatile 写操作前插入StoreStore屏障。在每个 volatile 写操作后插入StoreLoad屏障代价最高。4.3 汇编底层Lock 前缀指令如果你使用 -XX:UnlockDiagnosticVMOptions -XX:PrintAssembly 查看汇编代码你会发现 volatile 变量对应的赋值操作前有一行lock addl $0x0, (%rsp)这个 lock 前缀指令会锁定当前北桥信号或缓存行锁。强制将缓冲区数据写入内存。触发 MESI 协议的缓存失效机制。五、 原子性挑战为什么 i 依然失败虽然volatile解决了可见性和有序性但它不具备原子性。// 线程 A 和 B 同时执行 i // 1. 从主存读 i10 到各自工作内存 // 2. 各自计算 i1 11 // 3. 线程 A 写回 11 // 4. 线程 B 写回 11覆盖了 A 的结果实际上应该为 12解决方案CAS (Compare And Swap)CAS 是乐观锁的核心。它利用 CPU 的原子指令如 x86 的 cmpxchg实现。CAS(V, E, N)V要更新的变量E预期值N新值六、 总结通往高并发之路理解高并发本质上是理解数据在多层存储介质间的流动规则。硬件层通过 MESI 保证缓存一致。JVM 层通过 JMM 和 Happens-Before 屏蔽底层差异。应用层通过volatile、synchronized、CAS保证线程安全。掌握了这些你便拿到了通往高性能后端开发的钥匙。作者注本文深入探讨了并发底层机制如果你觉得有收获欢迎点赞、收藏并关注。在下一篇中我们将深入解析Java 锁升级从偏向锁到重量级锁的蜕变过程。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

凉山州规划和建设局网站著名室内设计网站大全

在免疫系统的复杂调控网络中,白细胞介素-2(IL-2)无疑是核心枢纽之一。自1976年被发现并命名为“T细胞生长因子”以来,IL-2凭借其既能驱动免疫攻击、又能维持免疫耐受的“双面性”,成为连接基础免疫学与临床治疗的关键分…

张小明 2026/1/11 12:43:43 网站建设

网站icp备案咋做友情链接平台站长资源

深入探究openSUSE Linux系统的性能调优与问题解决 1. 系统监控与初步操作 首先,登录运行GNOME的openSUSE Linux机器。在终端中输入 gnome-system-monitor 并按下回车键,随后花费几分钟时间查看各个选项卡,尤其关注每个进程所使用的内存量。完成后,关闭终端窗口并关闭虚…

张小明 2026/1/11 9:44:35 网站建设

手机网站开发库企业信用等级查询系统

你是否经常在地铁、飞机或偏远地区需要阅读外文资料却苦于网络问题?kiss-translator作为一款强大的开源离线翻译工具,提供了多种断网翻译解决方案,让你在任何环境下都能轻松阅读外文内容。 【免费下载链接】kiss-translator A simple, open s…

张小明 2026/1/11 12:20:43 网站建设

找生意做去哪个网站如何做好网站开发项目需求分析

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

张小明 2026/1/12 21:46:39 网站建设

外贸 网站外链交换wordpress 课程插件

PaddlePaddle镜像与MLflow集成:实现模型生命周期管理 在中文自然语言处理和工业级视觉识别项目中,一个常见的挑战是:研究员训练出高精度模型后,却因环境差异、参数记录缺失或版本混乱,导致无法在生产环境中复现结果。更…

张小明 2026/1/11 5:05:02 网站建设

深圳做app网站哈尔滨住房城乡建设局网站首页

深入浅出 CSS 弹性盒子:从基础到实战的完整指南大家好,今天咱们来聊聊前端布局的 “利器”——CSS 弹性盒子(Flexbox)。不管是做响应式页面,还是快速实现复杂布局,Flexbox 都是绕不开的核心知识点。这篇博客…

张小明 2026/1/13 9:20:43 网站建设