一针见血系列[12]: 自旋锁没有那么高大上,就是一个...

发布日期:2018年10月29日| 点击: 511 次| 暂无评论

我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。最简单的实现...

一针见血系列[11]: 一句话理解内核空间和用户空间

发布日期:2018年10月29日| 点击: 460 次| 评论: 1

内核空间,用户空间这些术语让人有点发蒙。空间的本质就是内存。一堆符号叫程序;跑起来之后叫进程;内存条插入主板,跑上程序,就变成了空间,被操作系统占用的叫内核空间,被用户进程占用的叫用户空间。 ...

一针见血系列[10]: 无锁同步并不是万能,同步锁也并...

发布日期:2018年10月29日| 点击: 487 次| 暂无评论

1、对于资源竞争较少的情况,使用同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗CPU资源;而CAS基于硬件实现,不需要进入内核,不需要切换线程,操作自旋几率较少,因此可以获得更高的性能。 ...

一针见血系列[9]: volatile的作用是什么?两者的关系...

发布日期:2018年10月29日| 点击: 1,047 次| 暂无评论

volatile关键字的作用主要有两个: (1)内存可见性,见:http://swiftlet.net/archives/3024 (2)有序性、禁止指令重排相关的内容,见这两篇文章: http://swi...

一针见血系列[8]: 什么叫内存可见性?什么叫寄存器可...

发布日期:2018年10月29日| 点击: 829 次| 暂无评论

数据在哪里存在呢?只在内存吗?不是的。数据在内存中存在,但是当用的时候会加载到CPU的寄存器里面。内存和寄存器是两个地方,从而出现了新的名词:内存可见性和寄存器可见性。 为什么叫内存可见性呢?感觉很...

一针见血系列[7]: volatile离我们很近,很亲切,不该...

发布日期:2018年10月29日| 点击: 772 次| 评论: 1

synchronized代码块儿里面的变量都实现了内存可见性。内存可见性的底层是CPU的指令实现的。volatile修饰的是变量,它的作用也是实现内存可见性,底层用的用的同一个CPU指令。可以这样理解:synchr...

一针见血系列[6]: CPU乱序执行是正常,不乱序才是...

发布日期:2018年10月29日| 点击: 751 次| 暂无评论

现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回等若干个阶段。多条指令可以同时存在于流水线中,同时被执行。 指令流水线并不是串行的,并不会因为一个耗时很长的指令在...

一针见血系列[5]: 一句话理解什么是happens-before

发布日期:2018年10月29日| 点击: 1,271 次| 暂无评论

在程序运行过程中,所有的变更会先在寄存器或本地cache中完成,然后才会被拷贝到主存以跨越内存栅栏,此种跨越序列或顺序称为happens-before。 注:happens-before本质是顺序,重点...

------====== 本站公告 ======------
金丝燕网,即将迎来四周年!