第一点,咱们来看一下Disruptor为什么如此高效,你们都知道并发也就是多线程编程的场景下为了保证数据共享的安全性都会使用锁的方式解决,可是由此带来的负面影响就是性能问题了,俗话说的好——锁匙性能的杀手。加了锁就丢失了不少的性能,Disruptor作的以第一件事情就是消除锁的使用,Disruptor内部使用了一个环形队列维护的一个RingBuffer缓冲区,在这个基础上使任何一个任务都是有序曲执行,在一个时间点上保证了队列内每一个元素只被一个线程所使用。其余线程处理队列其余的元素这样一来就保证了线程安全的问题,至于线程跟队列元素的具体交互细节这里就很少阐述,咱们主要研究性能为何这么高,固然只消除了锁的使用尚未完,Disruptor还沿用了cpu缓冲行的一个免费加载的特性去提升高速缓存的命中,这里说明一下cpu到主存的时间大约在60-80纳秒,cpu到缓冲的时间大约在1纳秒,若是命中的话就省去了59纳秒的时间,59纳米对于cpu或者对于高并发来讲是很稀有的资源了。接下来我们说一下cpu缓存行的概念,好比说如今有一个变量a和一个变量b这两个变量内存地址是相邻的,那么cpu在访问a变量的时间会把a变量加载到缓冲行上,缓冲行的免费加载特性会把相邻的b也加载进来尽管b变量对于当前的cpu来讲是没有用的,而且会继续把b变量后面地址相邻的内存数据也加载到缓存行只要缓存行满为止。那么咱们在编程的时间能够很好的利用缓冲行免费加载的特性来提升性能了,Disruptor就是这么作的,前面说了Disruptor内部维护了一个环形队列,这个队列是由数组实现的,你们都知道数组的特性就是一段内存地址连续的空间,那么cpu在加载队列内的一个元素进行处理的时间会把队列内当前元素的后续元素都加载到缓存行上面,队列只有序处理的那么也就是说缓存行上面的被免费加载的后续元素所有会命中,那么也就是说这个队列仅仅须要加载几回数据到缓存cpu就能够经过大量的命中去处理全部的元素。想一想看每次命中节约59纳秒,这个性能提高也是不小的啦!
编程
第一次写博客,按照我本身的话描述的个人理解,理解不对或者错误的地方欢迎指正,3q
数组