关键词:
多线程
无锁数据结构
本地缓冲区
原子指令
负载均衡
局部性良好
摘要:
近些年来,处理器的发展趋势由高频转向多核,这使得利用多线程发挥多核处理器的计算能力具有现实意义。消息队列在操作系统和应用程序中均有广泛应用,但基于锁同步机制的消息队列无法发挥多核处理器的优势,同时锁的使用增加了数据竞争和死锁等严重问题的风险。因此,研究人员对无锁数据结构进行深入研究,使用比较与交换同步原语的无锁数据结构能够摆脱数据竞争和死锁等问题,但是大多数无锁数据结构伸缩性不够良好,未能充分发挥多核处理器的性能优势。消息队列的核心数据结构是队列和过滤器,因此利用伸缩性良好的队列和过滤器提升消息队列的性能具有重要研究意义。本文以对现有消息队列进行改进为背景,以无锁数据结构相关技术为切入点,对消息队列中间件的实现进行研究,主要工作如下:(1)提出基于获取与增加的无锁队列DQueue。每个生产者使用本地缓冲区暂存入队请求,当缓冲区满时将数据批量写入共享队列,消费者读取暂存在缓冲区的数据时,使用普通访问语句代替昂贵的原子指令,通过减少缓存缺失和写缓冲区刷新提升效率。(2)提出两种基于比较与交换的Cuckoo哈希表。在写负载大于读负载的情况下,基于比较与交换的负载均衡Cuckoo哈希表通过实时限制每个桶的负载率提升写入效率。在读负载大于写负载的情况下,基于比较与交换的局部性良好Cuckoo哈希表通过将数据项集中存储在哈希表某一区域内提高正向查询效率。(3)提出消息队列CDMQ,将基于比较与交换的Cuckoo哈希表改进成并发Cuckoo过滤器CCF。CDMQ以CCF和DQueue为基础,多个生产者写入数据,消费者读取通过CCF过滤检验的数据。实验表明,CDMQ具有吞吐量高,伸缩性良好的优点。