高并发的情况下,锁是一个灾难;那么架构是如何做到无锁编程的?...
分类:
其他好文 时间:
2014-10-16 02:38:16
阅读次数:
151
这里分别使用有锁和无锁两种方式,对一个数值进行增加,一直增加到100000,然后输出使用时间的长短。 1 import java.util.concurrent.ExecutorService; 2 import java.util.concurrent.Executors; 3 import...
分类:
其他好文 时间:
2014-10-13 00:03:08
阅读次数:
335
前面在《眉目传情之匠心独运的kfifo》一文中详细解析了 linux 内核并发无锁环形队列kfifo的原理和实现,kfifo鬼斧神工,博大精深,让人叹为观止,但遗憾的是kfifo为内核提供服务,并未开放出来。剑不试则利钝暗,弓不试则劲挠诬,鹰不试则巧拙惑,马不试则良驽疑,光说不练是不能学到精髓的,下面就动手实现自己的并发无锁队列UnlockQueue(单生产者单消费者)。...
分类:
其他好文 时间:
2014-10-11 19:11:36
阅读次数:
336
星期三,2013年11月6日volatile关键字 : 1. 与synchronized几乎相同,但是volatile在多读少写的情况下,性能更优2. 用来定义成员变量时,可以保证多线程每次读取成员变量都是从共享内存中读取,保证值相等ConcurrentLinkedQueue:1. 无锁的并发线程安...
分类:
编程语言 时间:
2014-10-10 23:49:14
阅读次数:
332
昨天完成了无锁队列的实现,然后思考了一下锁的原理,锁的核心无非是保证有一个变量需要被原子性地更新,比如,我们用一个bool x,表示锁,当我们获取锁的时候,我们需要保证的是锁能够只在同一时间被多个线程中的一个线程去读取和更新,在逻辑上有如下的代码:
bool GetLock(bool& x){
if(x){
x= false;
...
分类:
其他好文 时间:
2014-10-10 20:34:04
阅读次数:
198
在上文《.Net中的并行编程-2.ConcurrentQueue的实现与分析》 中解释了无锁的相关概念,无独有偶BCL提供的ConcurrentQueue也是基于原子操作实现, 由于ConcurrentQueue的代码较多所以本文主要分析几个常用操作:入队(EnQueue) 、出队(TryDequ....
分类:
Web程序 时间:
2014-09-26 01:15:57
阅读次数:
245
在上篇文章《.net中的并行编程-1.基础知识》中列出了在.net进行多核或并行编程中需要的基础知识,今天就来分析在基础知识树中一个比较简单常用的并发数据结构--.net类库中无锁栈的实现。 首先解释一下什么这里“无锁”的相关概念。 所谓无锁其实就是在普通栈的实现方式上使用了原子操作,原子操作的原理...
分类:
Web程序 时间:
2014-09-26 00:24:47
阅读次数:
216
依靠数据默认的机制:Hibernate的加锁模式有:Ø LockMode.NONE : 无锁机制。Ø LockMode.WRITE :Hibernate在Insert和Update记录的时候会自动获取。Ø LockMode.READ : Hibernate在读取记录的时候会自动获取。以上这三种锁机制...
分类:
系统相关 时间:
2014-09-17 07:50:01
阅读次数:
206
最近在研究一个高性能的无锁共享内存消息队列,使用的fifo来通知。结合之前《基于管道通知的百万并发长连接server模型》文章,这里总结一下常用的通知机制。常用的通知机制中比较典型的有以下几种:1、signal这种机制下,我们向被通知进程发送一个特殊的signal(比如SIGUSR1),这样正在睡眠...
分类:
其他好文 时间:
2014-09-14 19:13:37
阅读次数:
240
无锁算法CAS概述 JDK5.0以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent包中,是专门用于多线并发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发应用程序。主要包含原子量、并发集合、同步器、可重入锁,并对线程池的构造提供了强力的支持。 .....
分类:
其他好文 时间:
2014-09-11 16:43:12
阅读次数:
256