zoukankan      html  css  js  c++  java
  • JCTools 简介

    JCTools

    早在96年就有论文提出了无锁队列的概念,再到后来 Disruptor,高性能已得到生产的验证。此处介绍的 Jctools 中的高性能队列,其性能丝毫不输于 Disruptor。

    JCTools (Java Concurrency Tools) 提供了一系列非阻塞并发数据结构(标准 Java 中缺失的),当存在线程争抢的时候,非阻塞并发数据结构比阻塞并发数据结构能提供更好的性能。

    JCTools 是一个开源工具包,在 Apache License 2.0 下发布,并在 Netty、Rxjava 等诸多框架中被广泛使用。

    JCTools 的开源 Github 仓库:https://github.com/JCTools/JCTools

    在 Maven 中引入 JCtools jar 包就能使用 JCTools 了:

            <dependency>
                <groupId>org.jctools</groupId>
                <artifactId>jctools-core</artifactId>
                <version>3.0.0</version>
            </dependency>
    

    JCTools 中主要提供了 Map 以及 Queue 的非阻塞并发数据结构:

    非阻塞 Map

    • ConcurrentAutoTable(后面几个map/set结构的基础)
    • NonBlockingHashMap
    • NonBlockingHashMapLong
    • NonBlockingHashSet
    • NonBlockingIdentityHashMap
    • NonBlockingSetInt

    NonBlockingHashMap 是对 ConcurrentHashMap 的增强,对多 CPU 的支持以及高并发更新提供更好的性能。

    NonBlockingHashMapLong 是 key 为 Long 型的 NonBlockingHashMap。

    NonBlockingHashSet 是对 NonBlockingHashMap 的简单包装以支持 set 的接口。

    NonBlockingIdentityHashMap 是从 NonBlockingHashMap 改造来的,使用 System.identityHashCode() 来计算哈希。

    NonBlockingSetInt 是一个使用 CAS 的简单的 bit-vector。

    非阻塞 Queue

    JCTools 提供的非阻塞队列分为 4 类,可以根据不同的应用场景选择使用:

    • SPSC-单一生产者单一消费者(有界和无界)
    • MPSC-多生产者单一消费者(有界和无界)
    • SPMC-单生产者多消费者(有界)
    • MPMC-多生产者多消费者(有界)

    “生产者”和“消费者”是指“生产线程”和“消费线程”。

            // spsc-有界/无界队列
            Queue<String> spscArrayQueue = new SpscArrayQueue(16);
            Queue<String> spscUnboundedArrayQueue = new SpscUnboundedArrayQueue(2);
            // spmc-有界队列
            Queue<String> spmcArrayQueue = new SpmcArrayQueue<>(16);
            // mpsc-有界/无界队列
            Queue<String> mpscArrayQueue = new MpscArrayQueue<>(16);
            Queue<String> mpscChunkedArrayQueue = new MpscChunkedArrayQueue<>(1024, 8 * 1024);
            Queue<String> mpscUnboundedArrayQueue = new MpscUnboundedArrayQueue<>(2);
            // mpmc-有界队列
            Queue<String> mpmcArrayQueue = new MpmcArrayQueue<>(16);
    

    参考资料:

    http://tutorials.jenkov.com/jctools/index.html

    https://segmentfault.com/a/1190000011009097

    https://blog.csdn.net/TheLudlows/article/details/90646236

  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/jmcui/p/12531040.html
Copyright © 2011-2022 走看看