用于 JVM 的 Java 并发工具。该项目旨在提供 JDK 目前缺少的一些并发数据结构:
并发队列的 SPSC/MPSC/SPMC/MPMC 变体:
SPSC/MPSC 链接阵列队列(有界和无界)提供性能、分配和占用空间之间的平衡
基于 MPSC/MPMC XAdd 的无界链接数组队列为生产者提供了降低的争用成本(使用 XADD 而不是 CAS 循环),并提供池化队列块以减少分配。
扩展的队列接口(MessagePassingQueue):
许多队列都可以使用Unsafe
(默认,使用sun.mic.Unsafe
)和Atomic
(依赖于AtomicFieldUpdater
)变体,以及Unpadded
(通过删除错误共享避免字段填充来减少占用空间)。
还有更多内容即将推出,欢迎贡献/建议。 JCTools 得到了社区的支持,并以问题/测试/文档/代码的形式做出贡献,帮助其成长。 JCTools 以合理的价格提供卓越的性能(免费!根据 Apache 2.0 许可证)。它很稳定,并被 Netty、RxJava 等著名框架所使用。 JCTools 也被商业产品使用,取得了很好的效果。
使用 Maven 添加最新版本作为依赖项:
< dependency >
< groupId >org.jctools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >4.0.3</ version >
</ dependency >
或者使用很棒的、从源代码构建的 https://jitpack.io/ 版本,您需要添加 Jitpack 存储库:
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
并设置以下依赖项:
< dependency >
< groupId >com.github.JCTools.JCTools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >v4.0.3</ version >
</ dependency >
您还可以通过将版本设置为“4.0.5-SNAPSHOT”来依赖此存储库中的最新快照(位于边缘)。
JCTools是maven构建的,需要现有的Maven安装和JDK8(仅用于构建,运行时兼容1.6)。
路径上有“MAVEN_HOME/bin”,并且 JDK8 设置为“JAVA_HOME”,您应该能够从此目录运行“mvn install”。
虽然您可以自由复制和扩展 JCTools,但如果您对 JCTools 有版本依赖关系,我们会更愿意这样做,以实现更好的支持、升级路径和讨论。 Maven/Gradle 的阴影插件是将 JCTools 与您的库融合的首选方式。 ShadeJCToolsSamples 项目中提供了示例。
JCTools 使用 JMH 基准和手卷线束进行基准测试。基准测试和相关说明可以在 jctools-benchmarks 模块自述文件中找到。尽情发挥吧,请让我们知道它在您的硬件上的表现。
mvn package
cd jctools-concurrency-test
java -jar target/concurrency-test.jar -v
实验工作可在 jctools-experimental 模块下进行。大多数东西的开发都是为了最终将其移植到核心,在那里它将被稳定并发布,但有些实现纯粹是为了参考而保留,有些可能永远不会毕业。小心贾伯沃克,我的孩子。
讨论 JCTools 的最佳方式是在 GitHub 问题系统上。任何问题都很好,GitHub 提供了比 twitter/mailing-list/gitter 更好的知识共享平台(或者至少我们是这么认为的)。
我们已获得 JetBrains 的 IntelliJ IDEA 许可证,以帮助开发 JCTools。这是一套很棒的工具,使开发人员受益,并最终使社区受益。
这是一家很棒且鼓舞人心的公司,立即购买他们的产品!
JCTools 享有源源不断的 PR、建议和用户反馈。这是一个社区!感谢大家的参与!