当前位置: 首页 > news >正文

Java并发编程6--重排序

重排序是指 编译 器和 理器 化程序性能而 指令序列 行重新排序的一种手段。

1.数据依赖性 

如果两个操作 访问 同一个 量,且 两个操作中有一个 写操作,此 时这 两个操作之 间就存在数据
依赖性。

数据依赖的类型

上面 3 种情况,只要重排序两个操作的 序,程序的 果就会被改
编译 器和 理器在重排序 ,会遵 守数据依赖 性, 编译 器和 理器不会改 存在数据依 关系的
两个操作的 序。
数据依 仅针对 理器中行的指令序列和线程中 行的操作, 不同处 理器之
和不同线程之 的数据依 性不被 编译 器和 理器考

2.as-if-serial语义 

as-if-serial语义 的意思是不管怎么重排序( 编译 器和 理器 了提高并行度),( 单线 程)
程序的 果不能被改 编译 器、 runtime 理器都必 遵守 as-if-serial 语义
算机中, 件技 和硬件技 有一个共同的目 :在不改 程序 果的前提下, 尽
可能提高并行度。
在不影响程序执行结果,保证数据依赖性的情况下,有些重排序是可以允许的。JMM会认为
这种重排序并不非法(not illegal),JMM允许这种重排序。

3.重排序对多线程程序的影响

单线 程程序中, 存在控制依 的操作重排序,不会改 变执 果( 也是 as-if-serial语义允
存在控制依 的操作做重排序的原因);
但在多 线 程程序中, 存在控制依 的操作重排序,可能会改变程序的执 果。

相关文章:

  • 动态规划 之 背包问题
  • 融合模型预测控制 (MPC) 的 RL 算法
  • 【产品推介】可驱动5A负载的降压型DC/DC转换器XBL1663
  • Jenkins同一个项目不同分支指定不同JAVA环境
  • 穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝
  • 基于Flask的广西高校舆情分析系统的设计与实现
  • 《Nuxt.js 实战:从放弃到入门》六、打造个性化文字转图片工具
  • 各类系统Pycharm安装教程
  • MongoDB between ... and ... 操作
  • Android嵌套滑动造成的滑动冲突原理分析
  • 解惑Python:一文解决osgeo库安装失败问题
  • DeepSeek + Vue实战开发
  • Python字符模糊匹配指南 RapidFuzz | python小知识
  • RocketMQ 5.0安装部署
  • Ubuntu 安装 OpenCV (C++)
  • 请解释设备像素、CSS 像素、设备独立像素、DPR、PPI 之间的区别 ?
  • 将图片base64编码后,数据转成图片
  • Jetson Agx Orin平台preferred_stride调试记录--1924x720图像异常
  • SQL代码规范
  • 外贸跨境订货系统流程设计、功能列表及源码输出
  • 凡客优品官方网站/seo短期培训班
  • 济南正规网站建设公司/seo发贴软件
  • 淘客网站做百度推广/朋友圈广告推广
  • java做3d游戏下载网站/浏览器谷歌手机版下载
  • 在线学习平台网站建设有什么功能/独立站推广
  • 丰台做网站/自媒体是什么