队列比较队列队列比较总结: 就性能而言,无锁(什么也不加) > CAS > LOCK; 从现实使用中考虑,我们一般选择有界队列(避免生产者速度过快,导致内存溢出);同时,为了减少Java的垃圾回收对系统性能的影响,会尽量选择array/heap格式的数据结构。
今天来讲讲我所知道的单机最快的MQ,它叫Disruptor先来介绍一下Disruptor,从翻译上来看,Disruptor—分裂、瓦解,Disruptor是国外某个金融、股票交易所开发的,2011年获得Duke奖,为成为单机最快的MQ,性能及高,无锁CAS,单机支持高并发怎么样,
Disruptor通过以下三种设计方案解决性能问题: 环形数组结构: 为了避免垃圾回收,使用数组代替链表 数组对处理器的缓存机制更加友好 元素位置定位: 数组长度为2^n^, 可以通过位运算,提升定位的速度 数组中元素下标采用递增的形式 index采用long类型,不用担心索引index溢出问题 无锁设计: 每个生产者或者消费者线程,会首先申请可以操作的元素在数组中的位置,如果申请成功,直接在申请到的位置上写入数据或者读取数据。
前言今天我们讲两个内容,第一个是JMH,第二个是Disruptor。这两个内容是给大家做更进一步的这种多线程和高并发的一些专业上的处理。生产环境之中我们很可能不自己定义消息队列,而是使用Disruptor。
而高并发,网络编程、微服务、海量数据的处理等技能,是每一个开发者进阶时的必学知识。本章从Redis简介和环境搭建开始,依次对 Redis 的各个基础及核心功能进行介绍,之后通过 Jedis 演示如何在Java程序中操作 Redis。