无声的性能杀手-伪共享(false-sharing)
前言
在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素。这段时间学习Log4j2解除到了Disruptor,它被誉为“最快的消息框架”,其LMAX架构能够在一个线程里每秒处理6百万订单!在讲到 Disruptor 为什么这么快时,接触到了一个概念——伪共享(false sharing),其中提到:缓存行上的写竞争是运行在 SMP 系统中并行线程实现可伸缩性最重要的限制因素。由于从代码中很难看出是否会出现伪共享,有人将其描述成无声的性能杀手。
这里给出伪共享的非标准定义:
缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。
前置知识
CPU缓存结构
要
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【收藏】JavaScript DOM操作简易速查手册
1 概述 1.1 前言 本文中简要罗列了JavaScript操作Dom的基本方法,其中包括元素查询、文档结构遍历、属性及内容操作、创建节点、插入节点及删除节点等内容。虽然JQuery更便利,但我还是喜欢用原生的API。 2 文档元素选取 2.1 ID选择器 通过ID选取元素是最简单和常用的选取元素的方法,ID选择器性能优于其它选择器。 var title = document.getElementById("title"); ID不存在,返回 null 。 查看示例程序 2.2 名称选择器 基于name属性的值选取元素区别于ID选择器。其一,name属性值 不是必须唯一,多个元素可能有同样的名称;其二,name属性只在少数HTML元素中有效,包括表单、表单元素、iframe 及 img 元素。 var sports = document.getElementsByName("sports"); 查看示例程序 2.3 标签选择器 利用HTML元素的标签名称选取指定类型的元素。 var h1 = document.getElementsByTagName("h1"); 查看示例程序 2.4...
- 下一篇
关于Java中的时间处理,你真的了解吗?
GitHub 2.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 2.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 2.4k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 之前在我的知识星球的直面Java板块中,给粉丝们出了这样一道题: 在Java中,如何获取不同时区的当前时间? 你知道这道题的正确答案应该如何回答吗?背后的原理又是什么呢? 然后,紧接着,我又提出了以下问题: 为什么以下代码无法得到美国时间。(在东八区的计算机上) System.out.println(Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")).getTime()); 接下来,本文就围绕这两个问题,来带领读者一起
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8编译安装MySQL8.0.19