可见性
问题原子性
问题有序性
问题CPU缓存的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。
也就是说CPU不充内存里直接读数据,而是冲CPU缓存里读数据。
首先,单核是不存在可见性问题的,为了提高计算机的性能,CPU从单核发展为多核。
对于
变量A
被缓存到CPU的缓存中,线程1
和线程2
由同一个CPU执行,变量A
对于线程1
和线程2
都是可见的,因此单核CPU不存在可见性
问题
线程1
由CPU1
执行需要读取变量A
,线程2
由CPU2
执行需要读取变量B
,但是如果线程2
要读取变量A
,但是变量A
在CPU1
的缓存里,变量A
对于线程2
不可见,同理变量B
对于线程1
不可见
线程1
和线程2
分别在CPU1
和CPU2
中执行,两个线程同时将变量count
从内存中读取到CPU缓存中,线程1
首先将数据处理(计数器加1)完成,然后写入内存,然后线程2
将数据处理完,然后写入内存。实际上,两个线程分别对计数器进行加1,count
本应该等于2
。但是在这种极限的情况先count
等于1
,这就是原子性
问题。
在说有序性之前,我们必须先来说一下指令重排,因为如果没有指令重拍的话,也就不存在有序性问题了。
指令重排
是指编译器和处理器在不影响代码单线程执行结果的前提下,对源代码的指令进行重新排序执行。这种重排序执行是一种优化手段,目的是为了处理器内部的运算单元能尽量被充分利用,提升程序的整体运行效率。
重排序分为以下几种:
微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很...
计算属性computed: 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持...
vbs:把一段文字中指定字符颜色变成红色的正则 functionc(Tstr,Word) Dimre Setre...
歌词编辑器 歌词编辑器 第一步:选择要播放的歌曲并播放 第二步:填写全部的歌词...
本文将研究 ES6 的 for ... of 循环。 旧方法 在过去,有两种方法可以遍历 javas...
一石激起千层浪,继中国区浩浩荡荡的大裁员告一段落之后,甲骨文并未因此收起手...
【排序算法】之lowb三人组冒泡、插入、选择 什么是lowb三人组 冒泡排序bubble so...
一、正则表达式概述 二、正则表达式在VBScript中的应用 三、正则表达式在VavaScr...
前言 相信大家都知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也...
ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可...