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 了:

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.jctools/jctools-core -->
<dependency>
<groupId>org.jctools</groupId>
<artifactId>jctools-core</artifactId>
<version>4.0.1</version>
</dependency>

Netty 中直接引入了 JCTools 的 Mpsc Queue,Caffeine 中引入了 JCTools 的 Mpsc Queue,复制了其中的代码,然后简单改了下。

阅读全文 »

简介

布隆过滤器有着广泛的应用,对于大量数据的“存不存在”的问题在空间上有明显优势,但是在判断存不存在是有一定的错误率(false positive),也就是说,有可能把不属于这个集合的元素误认为属于这个集合(False Positive),但不会把属于这个集合的元素误认为不属于这个集合(False Negative)。

布隆在 1970 年提出了布隆过滤器(Bloom Filter),是一个很长的二进制向量(可以想象成一个序列)和一系列随机映射函数(hash function)。可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于 1)。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求 100%正确的场合。

特点

  • 优点: 占用空间小,查询快
  • 缺点: 有误判,删除困难

专业术语

  • False Positive: 中文可以理解为“假阳性”,在这里表示,有可能把不属于这个集合的元素误认为属于这个集合
  • False Negative: 中文可以理解为“假阴性”,Bloom Filter 是不存在 false negatived 的, 即不会把属于这个集合的元素误认为不属于这个集合(False Negative)
阅读全文 »

简介

Python 是一种编程语言,广泛用于 Web 应用程序、软件开发、数据科学和机器学习(ML)。 开发人员使用 Python 是因为其高效和易于学习,并且可以在许多不同的平台上运行。 Python 软件可供免费下载,可与所有类型的系统完美集成,并且还可以提高开发速度。

在编程过程中,用 python 进行一些工具、脚手架等等一些小东西是非常方便的。

阅读全文 »

序列化的定义

序列化: 把对象转化为可传输的字节序列过程称为序列化。

反序列化: 把字节序列还原为对象的过程称为反序列化。

阅读全文 »

Jenkins 简介

Jenkins 是一款自动化的任务执行工具。通常用于持续集成/持续交付领域。

可以通过界面或 Jenkinsfile 告诉 Jenkins 执行什么任务, 何时执行。理论上, 我们可以让它执行任何任务, 但是通常只应用于持续集成和持续交付。

Jenkinsfile 是一个文本文件, 是部署 pipeline 概念在 Jenkins 中的表现形式。 和 Docker 的 Dockerfile 类似, 所有部署 pipeline 的逻辑都写在 Jenkinsfile 中。

阅读全文 »

简介

JMH(Java Microbenchmark Harness)是一个由 OpenJDK 提供的 Java 微基准测试工具,用于对 Java 代码进行微基准测试。微基准测试是针对程序中的小段代码或者单个方法的性能测试,旨在对代码的性能进行准确的度量和比较。

JMH 是为了解决 Java 程序微基准测试的一些挑战而开发的,它提供了以下主要功能:

  1. 自动化的基准测试 : JMH 提供了一组注解和 API,可以方便地定义测试用例,配置测试参数,执行测试,并输出测试结果。这样可以避免手动编写基准测试代码,减少测试代码的冗余和错误。
  2. 预热阶段 : JMH 在运行基准测试之前会进行预热阶段,通过多次运行测试代码来预热 JVM 和代码缓存,以尽量达到代码在稳定状态下的性能。
  3. 统计和报告 : JMH 会对测试结果进行统计和报告,包括平均执行时间、标准差、吞吐量、延迟等性能指标,这些指标可以帮助开发人员更准确地评估代码的性能表现。
  4. 可插拔的扩展性 : JMH 提供了丰富的插件和扩展点,可以扩展和定制基准测试的功能,满足特定的测试需求。

JMH 是一个强大的基准测试工具,特别适用于对 Java 代码进行微基准测试,它可以帮助开发人员更好地了解代码的性能特性,优化程序性能,并进行准确的性能比较。 在进行性能测试时,建议使用 JMH 来进行微基准测试,以确保测试结果的准确性和可靠性。

阅读全文 »

JVM 简介

JVM(Java 虚拟机, Java virtual machine), Java 虚拟机,一种能够运行 Java bytecode 的虚拟机,以堆栈结构机器来进行实做。最早由 Sun 微系统所研发并实现第一个实现版本,是 Java 平台的一部分,能够运行以 Java 语言写作的软件程序。 Java 虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

Java 虚拟机是整个 Java 平台的基石,是 Java 技术用以实现硬件无关与操作系统无关的关键部分,是 Java 语言生成出极小体积的编译代码的运行平台,是保障用户机器免于恶意代码损害的保护屏障。

阅读全文 »

简介

分散式算法(英语:Distributed algorithm),一种算法类型。为分散式计算而设计,它运行在一群相互连结的处理器所构成的计算机硬件平台上。分散式算法以并行方式执行,是平行算法下的子类别。因为同时运行在不同处理器上,对算法其他部分运行情况的资讯所知有限,使得这类型的算法较为困难。

阅读全文 »

Java 锁简介

Java 提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。

java 主流锁如下图:
java-lock-主流锁

阅读全文 »

netty 简介

Netty 是一个高性能、异步事件驱动的 NIO 网络应用框架, 它提供了对 TCP、UDP 和文件传输的支持. 基于 Netty, 可以快速的开发和部署高性能、 高可用的网络服务端和客户端应用.

阅读全文 »
0%