Herramientas de concurrencia de Java para JVM. Este proyecto tiene como objetivo ofrecer algunas estructuras de datos concurrentes que actualmente faltan en el JDK:
Variaciones de SPSC/MPSC/SPMC/MPMC para colas simultáneas:
Las colas de matriz vinculada SPSC/MPSC (limitadas e ilimitadas) ofrecen un equilibrio entre rendimiento, asignación y espacio
Las colas de matriz vinculadas ilimitadas basadas en MPSC/MPMC XAdd ofrecen costos de contención reducidos para los productores (usando XADD en lugar de un bucle CAS) y fragmentos de cola agrupados para una asignación reducida.
Una interfaz de cola ampliada (MessagePassingQueue):
Muchas colas están disponibles en variaciones Unsafe
(predeterminada, usa sun.mic.Unsafe
) y Atomic
(que se basan en AtomicFieldUpdater
), así como Unpadded
(menor espacio al eliminar el uso compartido falso y evitar el relleno de campos).
Hay más por venir y las contribuciones y sugerencias son bienvenidas. JCTools ha contado con el apoyo de la comunidad y las contribuciones en forma de problemas/pruebas/documentación/código lo han ayudado a crecer. JCTools ofrece un rendimiento excelente a un precio razonable (¡GRATIS! bajo la licencia Apache 2.0). Es estable y lo utilizan marcos tan distinguidos como Netty, RxJava y otros. JCTools también se utiliza en productos comerciales con excelentes resultados.
Agregue la última versión como dependencia usando Maven:
< dependency >
< groupId >org.jctools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >4.0.3</ version >
</ dependency >
O use la increíble versión https://jitpack.io/, creada desde el código fuente, deberá agregar el repositorio de Jitpack:
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
Y configure la siguiente dependencia:
< dependency >
< groupId >com.github.JCTools.JCTools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >v4.0.3</ version >
</ dependency >
También puede depender de la última instantánea de este repositorio (en vivo en el borde) configurando la versión en '4.0.5-SNAPSHOT'.
JCTools está construido por Maven y requiere una instalación de Maven existente y JDK8 (solo para compilación, el tiempo de ejecución es compatible con 1.6).
Con 'MAVEN_HOME/bin' en la ruta y JDK8 configurado en su 'JAVA_HOME' debería poder ejecutar "mvn install" desde este directorio.
Si bien usted es libre de copiar y ampliar JCTools, preferiríamos que tuviera una dependencia versionada de JCTools para permitir un mejor soporte, rutas de actualización y discusión. El complemento de sombra para Maven/Gradle es la forma preferida de fusionar JCTools con su biblioteca. Hay ejemplos disponibles en el proyecto ShadeJCToolsSamples.
JCTools se compara utilizando tanto los puntos de referencia de JMH como los arneses enrollados a mano. Los puntos de referencia y las instrucciones relacionadas se pueden encontrar en el módulo README de jctools-benchmarks. Vuélvete loco y cuéntanos cómo funcionó en tu hardware.
mvn package
cd jctools-concurrency-test
java -jar target/concurrency-test.jar -v
El trabajo experimental está disponible en el módulo jctools-experimental. La mayor parte del material se desarrolla con miras a trasladarlo eventualmente al núcleo donde se estabilizará y liberará, pero algunas implementaciones se mantienen puramente como referencia y es posible que algunas nunca se gradúen. Cuidado con el Jabberwock, hija mía.
La mejor manera de hablar sobre JCTools es en el sistema de problemas de GitHub. Cualquier pregunta es buena y GitHub proporciona una mejor plataforma para compartir conocimientos que twitter/mailing-list/gitter (o al menos eso es lo que pensamos).
JetBrains nos ha concedido amablemente licencias IntelliJ IDEA para ayudar en el desarrollo de JCTools. Es un gran conjunto de herramientas que ha beneficiado a los desarrolladores y, en última instancia, a la comunidad.
Es una empresa increíble e inspiradora, COMPRE SUS PRODUCTOS AHORA!!!
JCTools ha disfrutado de un flujo constante de relaciones públicas, sugerencias y comentarios de los usuarios. ¡Es una comunidad! ¡Gracias a todos por involucrarse!