Random(二)什么是伪共享?@sun.misc.Contended注解

news2024/11/24 9:11:23

目录

    • 1.背景简介
    • 2.伪共享问题
    • 3.问题解决
    • 4.JDK使用示例

1.背景简介

  • 我们知道,CPU 是不能直接访问内存的,数据都是从高速缓存中加载到寄存器的,高速缓存又有 L1,L2,L3 等层级。在这里,我们先简化这些复杂的层级关系,假设只有一级缓存和一个主内存。

  • CPU 读取和更新缓存的时候,是以行为单位进行的,也叫一个 cache line,一行一般 64 字节,也就是8个long的长度。

2.伪共享问题

一个缓存行可以放多个变量,如果多个线程同时访问不同的变量,而这些不同的变量又恰好位于同一个缓存行,那么会发生什么呢?

如上图所示,X 和 Y 为相邻 2 个变量,位于同一个缓存行,两个 CPU core1 和 core2 都加载了它们。

core1 更新 X,同时 core2 更新 Y,由于数据的读取和更新是以 缓存行 为单位的,这就意味着当这2件事同时发生时,就产生了竞争,导致 core1 和 core2 有可能需要重新刷新自己的数据(缓存行被对方更新了),最终导致系统的性能大打折扣,这就是伪共享问题。

3.问题解决

如下图:

如上图所示,我们把 X 单独占用一个缓存行,Y 单独占用一个缓存行,这样各自更新和读取,就不会有任何影响了

对应的操作就是在代码中使用 @sun.misc.Contended 注解。

4.JDK使用示例

例如在 JDK1.7 中 Thread 类中为 ThreadLocalRandom 增加的三个成员变量:

/**
 * 线程本地随机的当前种子。
 */
@sun.misc.Contended("tlr")
long threadLocalRandomSeed;

/**
 * 探测哈希值;如果线程本地随机种子被初始化,那么该值也非0。使用缓存填充(注解方式)来避免伪共享。
 */
@sun.misc.Contended("tlr")
int threadLocalRandomProbe;

/**
 * 从公共线程本地随机序列中分离的二级种子。
 */
@sun.misc.Contended("tlr")
int threadLocalRandomSecondarySeed;

@sun.misc.Contended("tlr") 就会在虚拟机层面,帮助我们在变量的前后生成一些 padding,使得被标注的变量位于同一个缓存行,不与其他变量冲突。

在 Thread 对象中,threadLocalRandomSeedthreadLocalRandomSeedthreadLocalRandomSecondarySeed 被标记为同一组 tlr,使得这 3 个变量放置于一个单独的缓存行,而不与其它变量发生冲突,从而提高在并发环境中的访问速度。

整理完毕,完结撒花~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对象创建的过程

对象创建的过程 在语言层面上,创建对象通常仅仅是一个new关键字而已(例外:复制、反序列化); 而在虚拟机中,对象的创建又是怎样一个过程呢?(文中讨论的对象限于普通Java对象&#xff…

Jetpack Compose 深入探索系列一:Composable 函数

Composable 函数的含义 如果我们只专注于简单的语法,任何标准的Kotlin函数都可以成为一个可组合函数,只需将其注解为Composable: 通过这样做,我们实际上是在告诉编译器,该函数打算将一些数据转换为一个Node节点,以便注…

Simulink建模:如何学习Simulink建模

本文介绍博主自己学习Simulink建模的方法。后续博客都会按照本文中的思路来记录博主学习的过程。 文章目录1 Simulink建模的分类1.1 连续模型建模1.2 物理模型建模1.3 控制算法建模2 控制算法建模的基本知识2.1 控制算法与电控软件架构2.2 控制算法与周期调度2.3 控制算法与其他…

分布式-分布式缓存笔记

分布式系统缓存 缓存分类 前端缓存 前端缓存包括页面和浏览器缓存,如果是 App,那么在 App 端也会有缓存。当你打开商品详情页,除了首次打开以外,后面重复刷新时,页面上加载的信息来自多种缓存。 页面缓存属于客户端…

61 - 进程互斥锁的详细设计

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题1.1 生活中的示例1.1.1 吃饭问题1.1.2 十字路口1.1.3 洗手间1.1.4 生产消费者问题1.2 结论2. 接下来的问题2.1 临界资源(Critical Resource)2.2 临界区(Critical Section)2.3 任…

【C3】cpu_wtd_sysfs

文章目录2.cpu_wtd_sysfs:switchboard.c (fpga下i2c访问Switch CPLD1,Switch CPLD2 :CPLD, FPGA , QSFP)scriptbmc_wtd:syscpld.c中wd_en和wd_kick节点对应寄存器,crontab,FUNCNAMEA…

Spring事务的隔离级别

事务的特性: 隔离性:多个事务在并发执行的时候,多个事务执行的一个行为模式,当一个事务执行的时候,另一个事务执行的一个行为模式是什么? 1)A,原子性,一个事务中的所有操作,要么全部执行成功&am…

I2C误码了怎么处理

我相信不少人有遇到I2C设备识别不到,或者概率性误码。 我相信大部分工程师的做法如下: 1.调整上拉电阻的大小,然后重新老化测试; 2.降低I2C速率,然后老化测试; 3.软件加入一定判断条件,将能…

Ncvicat 打开sql文件方法

Nacicat打开sql文件时,有比较多的文章介绍可以直接打开,方法介绍的比较多,但是我遇到了一个坑,就是如何配置环境都无法打开。 本机环境: windows10 mysql 5.7.40 Navicat12.1 一、遇到问题情况 1.1、通过navicat…

Kubernetes向集群外部暴露服务的方式你知道吗?

Kubernetes向进群外暴露服务的方式有三种:Ingress、LoadBlancer类型的Service、NodePort类型的Service。IngressIngress相当于service的service,可以将外部请求通过按照不同规则转发到对应的service。实际上,ingress相当于一个7层的负载均衡器…

面了一个月,终于让我总结出了这份最详细的接口测试面试题

目录 1、你们公司是如何做接口测试的? 2、什么时候开展接⼝测试? 3、接⼝测试和UI测试的工作是否重复? 4、接口测试框架怎么搭建? 5、接⼝之间有依赖时怎么处理? 6、如何判断接⼝测试的结果(成功或失败&a…

【C进阶】指针的高级话题

文章目录:star:1. 字符指针:star:2. 指针数组2.1 指针数组的定义2.2 指针数组的使用:star:3. 数组指针3.1 数组的地址3.2 数组指针的使用:star:4. 数组参数和指针参数:star:5. 函数指针5.1 函数名和函数的地址5.2 练习:star:6. 函数指针数组6.1 转移表:star:7. 指向函数指针数组…

昌德科技冲刺上市:计划募资约12亿元,蒋卫和为实控人

近日,深圳市昌德新材科技股份有限公司(下称“昌德科技”)递交招股书,准备在真真证券交易所主板上市。本次冲刺上市,昌德科技计划募资11.69亿元,中信建投证券为其保荐机构。 据招股书介绍,昌德科…

西电编译原理期末核心考点汇总(期末真题+相关知识点)

文章目录前言一、正规式1.1 相关知识点1.1.1 正规式定义1.1.2 辅助定义1.2 历年真题二、二义文法2.1 相关知识点2.1.1 二义性概念2.2 历年考题三、全部短语、直接短语和句柄3.1 相关知识点3.1.1 短语,直接短语和句柄定义3.1.2 短语,直接短语和句柄例题3.…

【企业管理】研发部视角提出对外支撑业务自助门户构思和实现

导读:公司是由不同部门组成,各个部门之间必然有协同才能使得公司各项职能正常运行。可以说公司的竞争力越强往往会得出公司内部之间工作协同就越高效,可以看出公司各部门之间协同对公司营运是十分重要的。高效协同前提必然是实现便利的信息共…

数据库设计表与表之间的关系详细介绍

文章目录数据库设计数据库设计简介表关系之一对多表关系之多对多表关系之一对一数据库设计 数据库设计简介 软件研发的步骤如下: 设计数据库还是很重要的 数据库设计概念: 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构…

Synology搭建Gitea(Docker)

Synology搭建Gitea(Docker) 文章目录Synology搭建Gitea(Docker)参考增加用户与用户组增加映像安装配置反向代理路由器端口转发参考 Nas轻量git方案:Docker安装Gitea;群晖(Synology) NAS 如何安装 gitea 增加用户与用户组 为所有Docer创建一个组docker; 权…

行测-判断推理-图形推理-样式规律-黑白运算

黑白元素个数不同,优先考虑黑白运算白白白黑黑白黑白黑选A考试时,这种题不要先把规律全部推出来,再去做题,太慢了直接看要推的图,通过排除法选答案黑白元素个数不同,优先考虑黑白运算白白白黑黑白黑白黑选B…

【5G RRC】5G系统消息SIB3介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

[python入门(52)] - python中的OS模块(包) - 1

目录 ❤ OS模块和path模块(函数) ❤ 当前路径及路径下的文件 ❤ 绝对路径 ❤ 查看指定文件路径的文件夹路径部分和文件名部分 ❤ 路径拼接 ❤ 获取路径的文件夹路径部分 ❤ 获取路径的文件名 ❤ 查看文件时间 ❤ 查看文件大小 ❤ 查看文件是否存在 ❤ OS模…