什么样的数据会存入缓存? 编译器或CPU可以明确知晓的,可能被经常访问的数据。例如一个在循环体中的变量,因为这个变量需要经常访问,如果每次都从主存中拿,那就太慢了。 缓存一致,是跟谁一致? 是跟主存一致,当主存中的对应数据发生变动的时候,CPU中的缓存也会随之变动。例如Cache中缓存了变量x的值, ...
分类:
其他好文 时间:
2019-05-11 16:31:36
阅读次数:
135
什么是 CPU 缓存行?
什么是内存屏障?
什么是伪共享?
如何避免伪共享?
分类:
其他好文 时间:
2019-05-11 14:52:08
阅读次数:
156
在学习多线程时,遇到了原子变量类,它是基于 CAS 和 volatile 实现的,能够保障对共享变量进行 read-modify-write 更新操作的原子性和可见性。于是我就写了一段代码试试,自认为非常正确。 用五个线程并发获得ID,每个线程获取100个,最后应该输出100才是,但试了好几次都不是 ...
分类:
编程语言 时间:
2019-05-10 13:05:08
阅读次数:
146
1.1volatile关键字使用底层原理: volatile是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。有volatile变量修饰的共享变量进行写操作的时候:1)将当前处理器缓存行的数 ...
分类:
编程语言 时间:
2019-05-06 23:26:16
阅读次数:
177
1、Page Visibility API标准概述 查看W3C的官方文档时候看到这个属性 标准时间线是这样介绍的: Page Visibility Level 2 W3C Proposed Recommendation 17 October 2017 查看W3C的工作流程的时候可以看到应该是处于W3 ...
分类:
其他好文 时间:
2019-05-06 14:14:35
阅读次数:
159
并发编程的3个重要概念 1.原子性: 一个操作或者多个操作,要么全部成功,要么全部失败 1.java中保证了基本数据类型的读取和赋值,保证了原子性,这些操作不可终端 2.可见性: volatile 可以保证可见性.主要是把变量放在主存里 多个线程访问这个变量,一个线程修改之后必须保证另一个线程可以看 ...
分类:
编程语言 时间:
2019-04-30 18:34:00
阅读次数:
155
Java JUC简介 在 Java 5.0 提供了 java.util.concurrent (简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Co ...
分类:
其他好文 时间:
2019-04-29 20:55:09
阅读次数:
150
从JDK 5 开始,JMM就使用happens-before的概念来阐述多线程之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见, 那么这2个操作之间必须要存在happens-before关系。这里提到的2个操作既可以是一个线程之内,也可以是不同线程之间。 ...
分类:
移动开发 时间:
2019-04-29 19:11:05
阅读次数:
223
1、锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。 互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。 可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改 ...
分类:
其他好文 时间:
2019-04-29 09:31:33
阅读次数:
125
题目大意:给出建筑的俯视图,以及每个建筑的左下角坐标,宽度,长度,高度。求正视图可观察到的建筑的编号 思路:建筑物的可见性等于南墙的可见性,依据左下角排序后,逐个判断每个建筑是否可见。对南墙的x坐标进行排序,相邻两个x坐标之间的南墙可见性一致,通过判断这部分南墙中的特殊点(中间点)可以得到这部分墙的 ...
分类:
其他好文 时间:
2019-04-26 20:56:29
阅读次数:
131