1、atomic_flag 和atomic<>的区别,atomic_flag 无论无锁是多大代价(一些cpu可能无锁代价大),都保证atomic_flag 是无锁的。atomic<>会视情况,可能是有锁的也可能是无锁的,哪个开销小选哪个。 2、C++内存模型可以被看作是C++程序和计算机系统(包括编 ...
分类:
其他好文 时间:
2019-10-01 09:31:40
阅读次数:
103
锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁。 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上 ...
分类:
编程语言 时间:
2019-09-25 00:55:23
阅读次数:
87
Linux kernel里面从来就不缺少简洁,优雅和高效的代码 比如,通过限定写入的数据不能溢出和内存屏障实现在单线程写单线程读的情况下不使用锁。因为锁是使用在共享资源可能存在冲突的情况下。还用设置buffer缓冲区的大小为2的幂次方,以简化求模运算,这样求模运算就演变为 (fifo->in & ( ...
分类:
系统相关 时间:
2019-09-20 21:37:27
阅读次数:
186
CPU性能优化手段-缓存为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存。尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。多级缓存L1Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。一般服务器CPU的L1缓存的容量通常在32-4096KB。L2由于L1级高速缓存容量的限制,为了再次提高CPU的运算速度,在
分类:
其他好文 时间:
2019-08-29 00:29:09
阅读次数:
135
CPU性能优化手段 缓存 为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。 例如:CPU高速缓存。尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。 多级缓存 L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。一般服务器CP ...
分类:
其他好文 时间:
2019-08-28 22:18:34
阅读次数:
86
锁的内存语义本质上可以说是对共享变量的更新,能及时让其他线程观察到;并且通过内存屏障,组织编译器或处理器指令重排序,导致多线程下不一致的现象。 1. volatile内存语义 见上一篇文章。 2. 锁的内存语义 (1)锁的释放和获取的内存语义 当线程释放锁时,JMM会将本地内存中的共享变量同步到主内 ...
分类:
其他好文 时间:
2019-08-13 00:52:36
阅读次数:
151
CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 多级缓存 L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU ...
分类:
其他好文 时间:
2019-07-08 21:05:32
阅读次数:
166
本文对volatile的概念、原子性、指令重排、内存屏障、使用与场景等知识做说明,试图为读者理解volatile提供帮助。 一. 概念 volatile字面意思是易变的、不稳定的。在Java中关键字volatile是一个类型修饰符,使用方式如: 其作用是告诉虚拟机该变量是极有可能多变的,此处免于一些 ...
分类:
其他好文 时间:
2019-06-23 22:57:15
阅读次数:
168
什么是 CPU 缓存行?
什么是内存屏障?
什么是伪共享?
如何避免伪共享?
分类:
其他好文 时间:
2019-05-11 14:52:08
阅读次数:
156
1、说说进程、线程、协程之间的区别 简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程.进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高.线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本 ...
分类:
编程语言 时间:
2019-04-24 11:58:02
阅读次数:
154