您的位置:首页 > 健康 > 养生 > 齐齐哈尔电话黄页_网站ui设计素材_国外推广网站有什么_重庆seo什么意思

齐齐哈尔电话黄页_网站ui设计素材_国外推广网站有什么_重庆seo什么意思

2025/4/29 18:55:26 来源:https://blog.csdn.net/qq_62877881/article/details/147514212  浏览:    关键词:齐齐哈尔电话黄页_网站ui设计素材_国外推广网站有什么_重庆seo什么意思
齐齐哈尔电话黄页_网站ui设计素材_国外推广网站有什么_重庆seo什么意思

《Java并发编程的艺术》书籍

在并发编程中存在两个问题:

  1. 线程之间如何通信
  2. 线程之间如何同步

一、JMM抽象结构

用来控制多线程之间的通信,可见性、有序性、原子性。
在这里插入图片描述

线程A如何与线程B进行通信

线程之间并没有直接通信通道,如图所示要想实现通信需经历:
1)将本地内存A中更新的变量刷新到主内存当中
2)线程B到主内存读取

二、重排序

为什么会进行重排序?简单来说就是提高性能。
有三种类型
1)编译器优化重排序
2)指令级并行的重排序
3)内存系统的重排序

1、重排序带来的问题

在多线程当中重排序可能会改变程序的执行结果,通过在生成指令序列时,插入特定类型的内存屏障指令来禁止重排序。

1.1内存屏障类型

在这里插入图片描述

1.2happens-before

在Java并发编程艺术这本书中写到,happens-before的概念是用来阐述操作之间的内存可见性。
在这里插入图片描述

2、数据依赖关系与控制依赖关系

2.1 什么是数据依赖关系

如果两个操作访问同一个变量,这两个操作中有一个为写操作,此时这两个操作就存在数据依赖关系。有三种类型,写后读、写后写、读后写。在单线程中执行时重排序会遵守数据依赖,编译器和处理器不会改变存在数据依赖关系的两个操作之间的执行顺序。

2.2 什么是控制依赖关系

在判断语句当中例如下列伪代码中,操作1和操作2之间存在着数据控制依赖关系。当存在控制依赖关系时,会影响指令序列执行的并行度。因此编译器和处理器会采用猜测执行来克服控制相关性对并行度的影响。具体来说,处理器可以提取读取和计算i*i,然后临时保存到一个名为重排序缓冲(Record Buffer,ROB)的硬件缓存中,当条件判断为真是,写入到a中。

if(flag){//操作1
a = i*i;//操作2
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com