最新要闻
- 速讯:孤芳自赏是哪一期蒙面唱将
- 【全球热闻】“韩国宾利”能拿下中国人吗?
- 焦点观察:票房破40亿中国影史第10!《流浪地球2》4月14日上线咪咕视频
- 焦点快看:叙利亚外交部谴责美国对叙发动敌对行动
- 张译包场张颂文的新电影《不止不休》!猫眼评分9.3分
- 世界快消息!2026年亚运会将不建设运动员村:为了削减开支
- 焦点资讯:3年来最盛大红毯叫停:邓超激动得像买票进场 胡歌刘亦菲杨幂同框梦回仙剑
- 当前速看:国内这些城市地标为地球熄灯一小时:有你认识的吗?
- 小米OPPO和vivo实现突破性跨越!微信聊天记录能互相迁移了
- 天天微资讯!武汉一小伙考研出分后失眠多日,医生支招制定减压计划
- 原来熊猫的笑声这么粗犷吗 网友直呼没想到:公鸭嗓笑的像反派
- 天天讯息:被马斯克16亿垄断的工艺 卡了下游企业的脖子
- 天天热点评!女孩穿汉服乘公交:颜值惊艳众人
- 环球视点!液体钙和钙片哪个更容易吸收(液体钙和钙片哪个更好吸收)
- 世界观点:《暗黑4》与《暗黑3》角色截图对比:女性角色更逼真了
- 捐100亿建大学 曹德旺:我赚了很多钱但不贪婪 会还给社会
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球关注:读Java性能权威指南(第2版)笔记28_线程和同步性能中
1.同步
1.1.代码块对一组变量的访问看上去是串行的:每次只有一个线程可以访问内存
【资料图】
1.1.1.由synchronized关键字保护的代码块
1.1.2.用java.util.concurrent.lock.Lock类的实例保护的代码
1.1.3.java.util.concurrent包中的代码
1.1.4.java.util.concurrent.atomic包中的代码
1.1.4.1.原子类不使用同步,至少在CPU编程方面是这样
1.1.4.1.1.使用CAS指令的线程在同时访问同一资源时不会阻塞
1.1.4.2.原子类利用了比较并交换(Compare and Swap,CAS)CPU指令
1.1.4.3.包中的类使用了基于CAS的原语,而不是传统的同步
1.2.同步的目的是保护对内存中值(或变量)的访问
1.3.同步需要独占访问资源
- 1.3.1.需要同步锁的线程在另一个线程持有该资源时会阻塞
2.同步的代价
2.1.同步和可扩展性
2.1.1.应用程序在同步块中花费的时间会影响应用程序的可扩展性
2.1.2.阿姆达尔定律(Amdahl"s law)
2.1.2.1.加速比=1÷((1-P)+P÷N)
2.1.2.2.P是并行运行的程序量
2.1.2.3.N是使用的线程数量
2.1.2.3.1.假设每个线程都有可用的CPU
2.1.2.4.随着P减小,也就是说,随着更多的代码位于串行块中,拥有多个线程的性能收益也会减少
2.2.获取同步锁需要CPU周期
2.3.获取同步锁的开销
2.3.1.如果锁是无竞争的,即两个线程没有在同一时间试图访问锁,那么这个开销是非常小的
2.3.1.1.非膨胀锁(uninflated lock)
2.3.1.1.1.无竞争的synchronized锁
2.3.1.1.2.获取一个非膨胀锁的开销在几百纳秒左右
2.3.1.2.无竞争的CAS结构会有更小的性能损失
2.3.2.有竞争的结构开销会更大
2.3.2.1.当第二个线程试图访问一个synchronized锁时,可以预见锁会变成膨胀的inflated
2.3.2.2.第二个线程必须等待第一个线程释放锁
2.3.2.3.这个等待时间取决于应用程序
2.3.3.在使用CAS指令的代码中,竞争操作的开销是不可预知的
2.3.3.1.在最坏的情况下,两个线程可能会陷入无限循环
2.3.3.1.1.因为每个线程修改CAS保护的值之后,发现另一个线程同时进行了修改
2.4.Java特有的,并取决于Java内存模型(Java Memory Model)
2.4.1.不同于C++和C这样的语言,它对关于同步的内存语义有严格的保证,并且该保证适用于基于CAS的保护、传统的同步,以及volatile关键字
2.4.2.变量会临时存储在寄存器中,这比直接在主内存中访问它们要高效得多
2.4.3.寄存器的值对其他线程来说是不可见的
2.4.4.修改寄存器中值的线程必须在某个时刻将该寄存器刷新到主内存中,这样其他线程才能看到这个值
2.4.5.什么时候刷新寄存器的值,是由线程同步决定的
2.4.6.对于标记为volatile的变量,无论什么时候被修改,都会被更新到主内存中
2.4.7.将大量连续的、细粒度的调用包装在一个同步块中
- 2.4.7.1.同步块执行时间很长就不适用
2.5.同步的内存语义、基于CAS的结构,以及volatile关键字会对性能产生负面影响,特别是在有很多寄存器的大型机器上
3.避免同步
3.1.避免同步对象的竞争是减轻其性能影响的有效方法
- 3.1.1.在每个线程中使用不同的对象,这样访问对象时就不存在竞争了
3.2.为了实现线程安全,很多Java对象是同步的,但它们未必需要共享
3.2.1.通过使用线程局部变量,对象的总数受到了限制(使对GC的影响最小化),而且每个对象都不会有线程竞争
3.2.2.线程局部变量永远都不会发生竞争,它们非常适合保存实际上不需要在线程间共享的同步对象
3.3.用基于CAS的替代方案
3.3.1.在某种意义上,这并不能避免同步,而是以不同的方式解决问题
3.3.2.在这种情况下,通过减少同步的损失,可以得到与避免同步相同的效果
3.3.3.对于确实需要共享的对象,基于CAS的工具是一种避免传统同步的方法
3.4.如果对资源的访问是无竞争的,基于CAS的保护会比传统的同步稍微快一些
3.5.如果访问始终是无竞争的,完全无保护还会再快一些,并且可以避免边界情况
3.6.如果对资源的访问存在轻度或者适度的竞争,基于CAS的保护会比传统的同步更快(通常会快得多)
3.7.随着所访问资源的竞争越来越激烈,传统的同步将在某个时候成为更高效的选择
- 3.7.1.在实践中,这种情况只发生在运行了很多线程的大型机器上
3.8.当只读取值而不写入的时候,基于CAS的保护不会受竞争的影响
3.9.没有什么可以替代在代码运行的实际生产条件下进行广泛的测试,只有这样,才能确定某一特定方法的哪种实现更好
4.伪共享
4.1.false sharing
4.2.缓存行共享(cache line sharing)
4.3.对于频繁修改volatile变量或退出同步块的代码,伪共享会显著降低性能
4.4.伪共享造成的最严重的损失,基本上每个写操作都会使所有其他缓存行失效,而且性能是串行的
4.5.伪共享不一定涉及同步(或volatile)变量,每当CPU缓存中的数据值被写入时,持有相同数据范围的其他缓存必须失效
4.6.Java内存模型要求,只有在同步原语(包括CAS结构和volatile)结束时,数据才必须写入主内存。所以这种情况是最常遇到的
4.7.标准工具集中,没有任何一个可以解决伪共享,因为这需要与处理器架构相关的专业知识
4.7.1.某些原生分析器可以提供和给定代码行每条指令的时钟周期数(cycles per instruction,CPI)相关的信息
4.7.2.在一个循环内,某个简单指令的CPI很高,就表明代码正在等待将目标内存重加载到CPU缓存
4.8.避免伪共享的主要方法是代码检查
4.9.防止伪共享需要修改代码
4.9.1.理想的情况是,所涉及的变量可以不那么频繁地写入
- 4.9.1.1.极少的写入次数不太可能引起缓存行的竞争,即使4个线程在循环结束时同时更新结果,也不会对性能产生影响
4.9.2.对变量进行填充,这样它们就不会被加载到同一缓存行上
- 4.9.2.1.也可以使用填充来将冲突的变量移至不同的缓存行
4.10.避免伪共享最好的方式是将数据移至局部变量,稍后再存储它们
5.@Contended注解
5.1.JDK私有类中的一个特性可以减少设定字段上的缓存竞争
5.2.通过使用@sun.misc.Contended标记由JVM自动填充的变量来实现的
5.3.这个注解是私有的
5.3.1.在Java 8中,它属于sun.misc包,没有什么能阻止你在自己的代码中使用这个包
5.3.2.在Java 11中,它属于jdk.internal.vm.annotation包,由于Java 11使用了模块系统
- 5.3.2.1.如果不用-add-exports标志将该包添加到java.base模块导出的类集中,就无法使用这个包编译类
5.4.-XX:+RestrictContended标志
5.4.1.默认是true
5.4.1.1.意味着该注解仅限于JDK的类使用
5.4.1.2.JVM会忽略这个注解
5.4.2.要让应用程序代码使用该注解,需要加上-XX:-RestrictContended标志
5.5.-XX:-EnableContended
5.5.1.默认是true
- 5.5.1.1.-XX:+EnableContended
5.5.2.禁用JDK的自动填充
- 5.5.2.1.这会减小Thread和ConcurrentHashMap类的大小,这两个类都使用这个注解来填充它们的实现,以防止伪共享
关键词:
全球关注:读Java性能权威指南(第2版)笔记28_线程和同步性能中
速讯:孤芳自赏是哪一期蒙面唱将
【全球热闻】“韩国宾利”能拿下中国人吗?
焦点观察:票房破40亿中国影史第10!《流浪地球2》4月14日上线咪咕视频
焦点快看:叙利亚外交部谴责美国对叙发动敌对行动
使用 Linux dd 命令测试磁盘读写性能
国际短信平台接口调用的方法步骤,简单5步快速教程
全球信息:Java之大数加减乘除——构建类
张译包场张颂文的新电影《不止不休》!猫眼评分9.3分
世界快消息!2026年亚运会将不建设运动员村:为了削减开支
焦点资讯:3年来最盛大红毯叫停:邓超激动得像买票进场 胡歌刘亦菲杨幂同框梦回仙剑
当前速看:国内这些城市地标为地球熄灯一小时:有你认识的吗?
小米OPPO和vivo实现突破性跨越!微信聊天记录能互相迁移了
天天微资讯!武汉一小伙考研出分后失眠多日,医生支招制定减压计划
linux中conda虚拟环境使用(便于项目切换)、pip和conda换源
原来熊猫的笑声这么粗犷吗 网友直呼没想到:公鸭嗓笑的像反派
天天讯息:被马斯克16亿垄断的工艺 卡了下游企业的脖子
天天热点评!女孩穿汉服乘公交:颜值惊艳众人
环球视点!液体钙和钙片哪个更容易吸收(液体钙和钙片哪个更好吸收)
python 使用 kafka
世界观点:《暗黑4》与《暗黑3》角色截图对比:女性角色更逼真了
捐100亿建大学 曹德旺:我赚了很多钱但不贪婪 会还给社会
女子摔跤上牙磕进嘴唇1月后才发现 医生惊叹不已:网友直呼心太大
徕卡+双长焦史无前例!小米13 Ultra曝光
焦点信息:Vue——initState【十】
当前信息:国外短信平台收不到验证码,怎么解决?
今日快看!什么叫针灸师
全球热文:红心番石榴吃法?
130余年老字号 非遗工艺 吴裕泰特种级茉莉香毫100g装40元
热资讯!灵隐寺旁小溪中大量放生乌龟死亡被吐槽是伪善 放生已成产业链最高2000元一次
【独家焦点】干旱缓解 新疆最大湖泊变了:阿雅克库木湖30年面积扩大近7成
焦点速讯:WPF 入门基础
周鸿祎与库克共话科技未来:惟一被淘汰的是不会用GPT的人
天天观点:12小时保温保冷 朴原良品316不锈钢保温杯16.9元起
世界快讯:代码漏洞暴露用户支付信息 ChatGPT安全存隐患:官方致歉
世界速讯:聚焦险企负债成本管理 监管座谈会释放调整信号
AMD Yes!Zen4回归骨折价 12核锐龙9 7900到手2549元
学生党福音 Redmi小金刚Note 12 Turbo的NFC卡升级:两大功能合体
当前资讯!mp3格式转换器哪个好_mp3格式转换器
dotnet-csharp
焦点精选!C++ sizeof与strlen,并借此明晰内存对齐
女生靠摆地摊还清百万负债 还有人两周赚1万5、月入万元:摆摊真这么赚钱?
【天天速看料】周鸿祎:中国与GPT-4差距两三年 不存在难以逾越技术障碍
当前热文:Windows OpenGL ES 图像 GPUImageAmatorkaFilter
javascript的基础知识
小彭汽车向小鹏汽车道歉:盘点那些神级模仿的老年代步车
【速看料】《三体》动画今日正式完结!豆瓣评分仅3.8:半数一星差评
焦点关注:998的比亚迪秦PLUS DM-i多能跑?博主极端工况实测:合资还怎么打
当前关注:Office2019永久激活工具_Office2019激活工具神龙版v2023.2
天天快播:What is static and dynamic libraries
[白嫖系列] 白嫖一个永久免费的eu.org域名
速看:76人攻防俱佳夺冠有望,湖人防守第一进攻拉胯,勇士卫冕基本无望
全球新资讯:女子模仿网红穿搭遭对方粉丝网暴!法院判网红连续15天道歉、赔偿
男子喝红牛味道不对发现是累牛引热议:康帅傅、雷碧等山寨货为何层出不穷
资讯推荐:关于aws-s3-bucket-静态网站托管相关的查询-S3.Client.get_bucket_website(**kwargs)
天天速读:西班牙经济连续两年增速达5.5%
用4年不卡!Redmi Note 12 Turbo配置公布:16GB+1TB、5000mAh
环球今头条!男子抖音晒夜爬泰山到井盖下躲风 景区回应:核实后会处罚
【焦点热闻】YCSB工具原理重点内容解读(二)
CSS鼠标样式(cursor)总结(转载)
每日速看!因航班延误缺考复试 考研生崩溃大哭:对不起父母 对不起自己的努力
猪肉含量≥85% 一口全是肉:亚明猪肉烤肠29.9元2斤大促
越秀资本03月24日获深股通增持98.52万股
精选!宏基e1471g怎么样
热文:czide-CALLAN自制语言(python)
环球短讯!《安富莱嵌入式周报》第307期:开源智能制冷板,Keil MDK6发布时间,编程助手Github Copilot X,Matlab2023,高品质电容
英特尔联合创始人戈登·摩尔去世:享年94岁 “摩尔定律”提出者
天天热点!公司回应招聘前台要求身材 硬性要求臀围86腰围58:网友吐槽离谱
每日消息!学习 React 需要具备的 JavaScript 知识
全球观点:gs_probackup增量备份ptrack.cpp : 88
农事贵争时 物资“抢运”忙——黑龙江部分地区备春耕铁路运输见闻
环球观焦点:中国驻科威特大使馆发布斋月期间领事温馨提醒
妮维雅SPA级氨基酸洗面奶19.9元官方大促:原价87.9元
库克中国行:晒和黄龄合影、宣布苹果捐赠增加至1亿元支持教育事业
天天时讯:读Java性能权威指南(第2版)笔记27_线程和同步性能上
热资讯!蓝盘、紫盘、黑盘?2023年机械硬盘怎么买?
世界快看点丨《互联网广告管理办法》公布:弹出广告不能“一键关闭”最高可罚3万
今日精选:在 Ubuntu 和 Fedora 中设置 Python 开发环境
世界今日报丨网友修iPhone偶遇苹果CEO库克:让他在碎了的后盖上签了个名
90后情侣3年存100万裸辞飞荷兰 网友热议:有勇气活的很洒脱
信息:俄称打击乌军人员装备 乌称击退俄军进攻
环球短讯!12-指针02
全球今亮点!C++ 虚函数(virtual) 和纯虚函数(pure virtual) 的区别
40秒看天宇上演“星月神话”:被月亮星星浪漫到了 月牙慢慢掩盖金星
热门:完全禁用汽柴油?中石化及专家回应了
AMD RX 7900 XTX超频3.4GHz:功耗失控650W!还是打不过RTX 4090
环球实时:ChatGPT开放第三方插件!瞬间 其他AI成了绝望的文盲
快消息!英国监管机构相信微软不会独占CoD
全球滚动:安全环保标语8字_安全环保标语有哪些?
信息:中国动力电池发展正当其时 锂电隔膜产业乘势而上
世界今日报丨使用 PC 端浏览器开发者工具对移动端真机环境 Web 页面进行远程调试
每日看点!Microsoft edge锁定在任务栏上,被修改主页360的解决方法
全球热消息:深圳一公司发文拒招已婚未育员工:回应如此大言不惭
世界新动态:郭明錤:iPhone 15全系灵动岛 苹果升级传感器后体验更强大了
全球热点评!蜗牛的资料和特点分别是什么
天天新消息丨Midjourney AI绘画使用指南
Django笔记七之ManyToMany和OneToOne介绍
4K 3D 高帧率重制!《泰坦尼克号》重映预售开启:4月3日上映
热推荐:沪一男子多次在五星级酒店开房,记录和发票被“神秘女”轻松拿走?细思极恐...
【金融街发布】人民银行:2月发行各类债券54724.3亿元