news 2026/4/25 18:21:21

并发编程(10)-收尾

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
并发编程(10)-收尾

JMM基础-计算机原理

操作响应时间
打开一个站点几秒
数据库查询一条记录(有索引)十几毫秒
1.6G的CPU执行一条指令0.6纳秒
从机械磁盘顺序读取1M数据2-10毫秒
从SSD磁盘顺序读取1M数据0.3毫秒
从内存连续读取1M数据250微秒
CPU读取一次内存100纳秒
1G网卡,网络传输2kb数据20微秒
1秒 = 1000毫秒    1毫秒 = 1000微秒    1微秒 = 1000纳秒

物理内存模型带来的缓存问题

多核CPU处理程序时,每个CPU都有自己的高速缓冲区。

CPU A和B同时执行:

1、执行步骤1,CPU A将a = 1写入缓冲区,CPU B将b = 1写入缓冲区;

2、执行步骤2,CPU A读取主内存,读到结果b = 0; CPU B读取主内存,读到结果a = 0;

3、执行步骤3,CPU A将a = 1刷新到主内存,CPU B将b = 1刷新到主内存;

4、执行步骤4,CPU A将读取的b = 0赋值给x,所以x = 0;

                         CPU B将读取的a = 0赋值给y,所以y = 0;

5、执行结束前,CPU A将x = 0刷到主内存;

                           CPU B将y = 0刷到主内存;

伪共享

CPU是以缓存行为单位读写的,每个缓存行大小为64byte。

所以缓存行是CPU最小的缓存单位。

long类型占用8byte(64位)。

假如x和y正好写在同一个缓存行上,这时候CPU A要访问x,CPU B要访问y。看似两个CPU读取的不同的对象应该不会涉及关联,但由于x和y存储在同一缓存行上导致产生了竞争,这就是伪共享现象,对性能有影响。

防止缓存行的竞争,可以填充补位

disruptor高速队列就是采用了补位来提升性能(百万级吞吐量:无锁化读写,环形队列避免GC,避免伪共享)

/** * jdk8新特性,Contended注解避免false sharding * Restrict on user classpath * Unlock: -XX:-RestrictContended */ @sun.misc.Contended public final static class VolatileLong { public volatile long v = 0L; }

Java内存模型(JMM)

工作内存=共享变量的副本

工作内存是抽象的一个概念,并没有实际对应的硬件来呈现它。

JMM导致的并发安全问题

可见性问题:

线程1读取主内存count值到工作内存副本中,值为1,进行++操作;

线程2读取主内存count值到工作内存副本中,值可能也为1,因为线程1同步主内存时间不确定。

可以使用volatile和锁解决可见性问题。

竞争(原子)问题:

线程1,线程2读取主内存count值,分别进行++操作;

最终主内存count值应该为3(由于每个线程读取到的count=1,++操作后count=2,最终线程会将2刷回主内存);

可以使用锁来解决,将线程的并行操作改为线性操作。

Java内存模型中的重排序

重排序类型

重排序与依赖性

名 称代码示例说    明
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 18:20:27

董永建《信息学奥赛一本通》(C++版)

​欢迎大家订阅我的专栏:算法题解:C与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选…

作者头像 李华
网站建设 2026/4/25 18:16:53

GEO推广服务深度解读:AI搜索时代的企业流量新范式

GEO推广服务全解析:AI搜索时代企业流量新策略当下,生成式AI深度融入主流搜索引擎,用户获取信息的方式发生了根本性转变。曾经“输入关键词、浏览结果列表”的传统搜索模式,正逐渐被“自然语言提问、AI生成答案”的智能交互模式所取…

作者头像 李华
网站建设 2026/4/25 18:12:03

终极指南:如何用AlDente免费延长MacBook电池寿命50%

终极指南:如何用AlDente免费延长MacBook电池寿命50% 【免费下载链接】AlDente-Battery_Care_and_Monitoring Menubar Tool to set Charge Limits and Prolong Battery Lifespan 项目地址: https://gitcode.com/gh_mirrors/al/AlDente-Battery_Care_and_Monitoring…

作者头像 李华
网站建设 2026/4/25 18:12:02

13.DATEDIFF 函数深度解析

Hive DATEDIFF 函数深度解析 目录 函数概述语法定义参数与返回值机制 3.1 参数说明3.2 返回值类型与规则 核心原理:日期解析与差值计算 4.1 日期解析机制4.2 天数差计算规则4.3 时区对计算的影响 日期格式要求:最关键的陷阱 5.1 Hive 接受的格式5.2 格…

作者头像 李华