Outils de concurrence Java pour la JVM. Ce projet vise à proposer quelques structures de données concurrentes actuellement absentes du JDK :
Variations SPSC/MPSC/SPMC/MPMC pour les files d'attente simultanées :
Les files d'attente de tableaux liés SPSC/MPSC (limitées et illimitées) offrent un équilibre entre performances, allocation et empreinte
Les files d'attente de tableaux liés illimitées basées sur MPSC/MPMC XAdd offrent des coûts de contention réduits pour les producteurs (en utilisant XADD au lieu d'une boucle CAS) et des morceaux de file d'attente regroupés pour une allocation réduite.
Une interface de file d'attente étendue (MessagePassingQueue) :
De nombreuses files d'attente sont disponibles dans les variantes Unsafe
(par défaut, utilise sun.mic.Unsafe
) et Atomic
(s'appuyant sur AtomicFieldUpdater
), ainsi que Unpadded
(empreinte réduite en supprimant le faux partage en évitant le remplissage des champs).
Il y a d'autres choses à venir et les contributions/suggestions sont les bienvenues. JCTools a bénéficié du soutien de la communauté et les contributions sous forme de problèmes/tests/documentation/code l'ont aidé à se développer. JCTools offre d'excellentes performances à un prix raisonnable (GRATUIT ! sous la licence Apache 2.0). Il est stable et utilisé par des frameworks aussi distingués que Netty, RxJava et autres. JCTools est également utilisé par des produits commerciaux avec d'excellents résultats.
Ajoutez la dernière version en tant que dépendance à l'aide de Maven :
< dependency >
< groupId >org.jctools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >4.0.3</ version >
</ dependency >
Ou utilisez la version géniale, construite à partir des sources, https://jitpack.io/, vous devrez ajouter le référentiel Jitpack :
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
Et configurez la dépendance suivante :
< dependency >
< groupId >com.github.JCTools.JCTools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >v4.0.3</ version >
</ dependency >
Vous pouvez également compter sur le dernier instantané de ce référentiel (en direct en périphérie) en définissant la version sur « 4.0.5-SNAPSHOT ».
JCTools est construit avec Maven et nécessite une installation Maven existante et JDK8 (uniquement pour la construction, le runtime est conforme à la version 1.6).
Avec 'MAVEN_HOME/bin' sur le chemin et JDK8 défini sur votre 'JAVA_HOME', vous devriez pouvoir exécuter "mvn install" à partir de ce répertoire.
Bien que vous soyez libre de copier et d'étendre JCTools, nous préférerions de loin que vous ayez une dépendance versionnée sur JCTools pour permettre une meilleure prise en charge, des chemins de mise à niveau et des discussions. Le plugin shade pour Maven/Gradle est le moyen privilégié pour fusionner JCTools avec votre bibliothèque. Des exemples sont disponibles dans le projet ShadeJCToolsSamples.
JCTools est évalué à l'aide de tests JMH et de harnais roulés à la main. Les benchmarks et les instructions associées peuvent être trouvés dans le module jctools-benchmarks README. Allez-y et faites-nous savoir comment cela s'est passé sur votre matériel.
mvn package
cd jctools-concurrency-test
java -jar target/concurrency-test.jar -v
Les travaux expérimentaux sont disponibles sous le module jctools-experimental. La plupart des éléments sont développés dans l'optique de les porter éventuellement vers le noyau où ils seront stabilisés et publiés, mais certaines implémentations sont conservées uniquement à titre de référence et d'autres pourraient ne jamais être diplômées. Méfiez-vous du Jabberwock mon enfant.
La meilleure façon de discuter de JCTools est sur le système de problèmes GitHub. Toute question est bonne, et GitHub offre une meilleure plateforme de partage de connaissances que twitter/mailing-list/gitter (ou du moins c'est ce que nous pensons).
Nous avons aimablement reçu des licences IntelliJ IDEA de JetBrains pour nous aider au développement de JCTools. Il s'agit d'une excellente suite d'outils qui a profité aux développeurs et, finalement, à la communauté.
C'est une entreprise géniale et inspirante, ACHETEZ LEURS PRODUITS MAINTENANT !!!
JCTools a bénéficié d'un flux constant de relations publiques, de suggestions et de commentaires des utilisateurs. C'est une communauté ! Merci à tous de vous être impliqués !