【死磕Java并发】—–Java内存模型之总结 (cmsblogs.com)

【简介】

经过四篇博客阐述,我相信各位对Java内存模型有了最基本认识了,下面LZ就做一个比较简单的总结。

总结

JMM规定了线程的工作内存和主内存的交互关系,以及线程之间的可见性和程序的执行顺序。一方面,要为程序员提供足够强的内存可见性保证;另一方面,对编译器和处理器的限制要尽可能地放松。JMM对程序员屏蔽了CPU以及OS内存的使用问题,能够使程序在不同的CPU和OS内存上都能够达到预期的效果。

Java采用内存共享的模式来实现线程之间的通信。编译器和处理器可以对程序进行重排序优化处理,但是需要遵守一些规则,不能随意重排序。
原子性:一个操作或者多个操作要么全部执行要么全部不执行;
可见性:当多个线程同时访问一个共享变量时,如果其中某个线程更改了该共享变量,其他线程应该可以立刻看到这个改变;
有序性:程序的执行要按照代码的先后顺序执行;

在并发编程模式中,势必会遇到上面三个概念,JMM对原子性并没有提供确切的解决方案,但是JMM解决了可见性和有序性,至于原子性则需要通过锁或者Synchronized来解决了。

如果一个操作A的操作结果需要对操作B可见,那么我们就认为操作A和操作B之间存在happens-before关系,即A happens-before B。

happens-before原则是JMM中非常重要的一个原则,它是判断数据是否存在竞争、线程是否安全的主要依据,依靠这个原则,我们可以解决在并发环境下两个操作之间是否存在冲突的所有问题。JMM规定,两个操作存在happens-before关系并不一定要A操作先于B操作执行,只要A操作的结果对B操作可见即可。

在程序运行过程中,为了执行的效率,编译器和处理器是可以对程序进行一定的重排序,但是他们必须要满足两个条件:1 执行的结果保持不变,2 存在数据依赖的不能重排序。重排序是引起多线程不安全的一个重要因素。

同时顺序一致性是一个比较理想化的参考模型,它为我们提供了强大而又有力的内存可见性保证,他主要有两个特征:1 一个线程中的所有操作必须按照程序的顺序来执行;2 所有线程都只能看到一个单一的操作执行顺序,在顺序一致性模型中,每个操作都必须原则执行且立刻对所有线程可见。

点击查看原文 >>

@技术头条 2017-03-11 23:58 / 0个评论
赞过的人: @技术头条
要不要再学学下面的文章?
图解Blink-Tree:B+Tree的一种并发优化结构和算法 (www.codedump.info)
本文介绍了 Blink-Tree,这是一种 B+Tree 的并发优化结构。通过引入 high key 和 link 指针,解决了并发访问时的性能问题,特别适用于高并发环境的存储引擎优化。如果你对数据库存储引擎感兴趣,这篇文章不容错过!
by @技术头条 2024-09-09 23:46 查看详情
Java程序调用外网API时CA问题 (lisenhui.cn)
Java 安全设置问题常常让开发者头疼,特别是与 cacerts 证书库相关的配置。本文详细解读了 Java 中的 cacerts 文件问题,帮助你排除常见错误,并提供了实用的解决方案。通过这些技巧,你可以更好地管理证书库,提升应用安全性。如果你在 Java 开发中遇到证书问题,千万不要错过!
by @技术头条 2024-09-08 23:22 查看详情
【大模型系列】指令微调 (hubojing.github.io)
本文总结了大模型中的指令微调(Instruction Tuning)技术,重点介绍了如何通过指令化数据对大语言模型进行参数微调以提升任务性能。文章探讨了数据构建方法如Self-Instruct和Evol-Instruct,以及微调策略包括优化设置和高效微调方法。通过这些技术,模型可以在多任务场景中表现出色。此内容对希望提升大语言模型能力的研究者和开发者具有参考价值。
by @技术头条 2024-08-06 08:12 查看详情
【大模型系列】提示学习 (hubojing.github.io)
本文介绍了提示学习(Prompt Learning)的基础概念和应用场景。作者详细讨论了提示学习在大语言模型中的作用,以及如何通过优化提示来提高模型的任务表现。文章还分享了在实际应用中调整和设计提示的技巧,并探讨了该技术在自然语言处理中的未来发展趋势。这篇文章为希望利用大模型进行高效自然语言处理的开发者提供了有价值的见解。
by @技术头条 2024-08-06 08:11 查看详情
2024 年中总结 - 苏洋 (soulteary.com)
本文总结了作者在2024年上半年的个人成长和技术进展。作者在GitHub上积极参与开源项目,分享了1100多次代码提交,推动了多个Docker项目的发展。同时,他在知乎和其他技术平台上取得了显著的写作成就,包括获得“大模型优秀答主”称号。此外,作者还参与了多个技术活动和社区交流,推动AI技术的普及和应用。文章还提到他在多平台上的活跃表现和未来的计划。
by @技术头条 2024-08-06 07:58 查看详情
大批量动画模型的优化 (blog.codingnow.com)
最近和公司一个开发团队探讨了一下他们正在开发的游戏中遇到的性能问题,看看应该如何优化。这个游戏的战斗场景想模仿亿万僵尸(They are billions)的场景。在亿万僵尸中,场景中描绘了上万的僵尸潮,但我们这个游戏,超过 500 个僵尸就遇到了性能问题。固然,手机的硬件性能比不上 PC ,但 500 这个数量级还是略低于预期。

对于游戏中大量类似的动画物体,肯定有方法可以优化。
by @技术头条 2024-05-05 23:26 查看详情
如何根据LLM的参数估算内存(显存)使用量 (it.deepinmind.com)
理解像Mistral-7B这样的模型的内存需求量对于优化其部署和使用至关重要。对于考虑使用云计算服务进行模型训练和推理的人来说更是如此,因为它会影响到硬件的选择和整体成本。
by @技术头条 2024-04-03 01:54 查看详情
sqlite并发读写的演进之路 (www.codedump.info)
本文梳理sqlite并发读写方案的演进之路。
by @技术头条 2024-03-21 23:26 查看详情
从存储模型聊一聊时序数据库的应用场景 (www.codedump.info)
本文介绍时序数据库的存储模型,只有理解了时序数据的存储模型,才能更好的了解时序数据库的优缺点以及其适用场景。
by @技术头条 2024-03-21 23:25 查看详情
图解一致性模型 (www.codedump.info)
本文使用大量的图例,同时没有难懂的公式,意图解释清楚一致性模型要解决什么问题,以及三种一致性模型:顺序一致性、线性一致性、因果一致性。
by @技术头条 2024-03-21 23:23 查看详情