Java-Parallelitätstools für die JVM. Dieses Projekt zielt darauf ab, einige gleichzeitige Datenstrukturen anzubieten, die derzeit im JDK fehlen:
SPSC/MPSC/SPMC/MPMC-Varianten für gleichzeitige Warteschlangen:
SPSC/MPSC-Linked-Array-Warteschlangen (begrenzt und unbegrenzt) bieten ein Gleichgewicht zwischen Leistung, Zuweisung und Platzbedarf
MPSC/MPMC XAdd-basierte, unbegrenzte Linked-Array-Warteschlangen bieten reduzierte Konkurrenzkosten für Produzenten (unter Verwendung von
Eine erweiterte Warteschlangenschnittstelle (MessagePassingQueue):
Viele Warteschlangen sind sowohl in den Varianten Unsafe
(standardmäßig verwendet sun.mic.Unsafe
) und Atomic
(basierend auf AtomicFieldUpdater
) als auch in der Variante Unpadded
(geringerer Platzbedarf durch Entfernen falscher Freigaben zur Vermeidung von Feldauffüllungen) verfügbar.
Es wird noch mehr kommen und Beiträge/Vorschläge sind herzlich willkommen. JCTools hat die Unterstützung der Community genossen und Beiträge in Form von Problemen/Tests/Dokumentation/Code haben zum Wachstum beigetragen. JCTools bietet hervorragende Leistung zu einem vernünftigen Preis (KOSTENLOS! unter der Apache 2.0-Lizenz). Es ist stabil und wird von namhaften Frameworks wie Netty, RxJava und anderen verwendet. JCTools wird auch von kommerziellen Produkten mit großem Erfolg verwendet.
Fügen Sie die neueste Version als Abhängigkeit mit Maven hinzu:
< dependency >
< groupId >org.jctools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >4.0.3</ version >
</ dependency >
Oder verwenden Sie die fantastische, aus dem Quellcode erstellte Version https://jitpack.io/. Sie müssen das Jitpack-Repository hinzufügen:
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
Und richten Sie die folgende Abhängigkeit ein:
< dependency >
< groupId >com.github.JCTools.JCTools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >v4.0.3</ version >
</ dependency >
Sie können sich auch auf den neuesten Snapshot aus diesem Repository verlassen (live am Edge), indem Sie die Version auf „4.0.5-SNAPSHOT“ festlegen.
JCTools ist Maven-erstellt und erfordert eine vorhandene Maven-Installation und JDK8 (nur zum Erstellen, Laufzeit ist 1.6-kompatibel).
Wenn „MAVEN_HOME/bin“ im Pfad steht und JDK8 auf „JAVA_HOME“ eingestellt ist, sollten Sie „mvn install“ aus diesem Verzeichnis ausführen können.
Es steht Ihnen zwar frei, JCTools zu kopieren und zu erweitern, wir würden es jedoch vorziehen, wenn Sie eine versionierte Abhängigkeit von JCTools hätten, um besseren Support, Upgrade-Pfade und Diskussionen zu ermöglichen. Das Shade-Plugin für Maven/Gradle ist die bevorzugte Möglichkeit, JCTools mit Ihrer Bibliothek zu verschmelzen. Beispiele sind im ShadeJCToolsSamples-Projekt verfügbar.
JCTools wird sowohl mit JMH-Benchmarks als auch mit handgerollten Kabelbäumen bewertet. Die Benchmarks und zugehörigen Anweisungen finden Sie in der README-Datei zum Modul „jctools-benchmarks“. Probieren Sie es aus und teilen Sie uns bitte mit, wie es auf Ihrer Hardware funktioniert hat.
mvn package
cd jctools-concurrency-test
java -jar target/concurrency-test.jar -v
Experimentelle Arbeiten sind im Modul jctools-experimental verfügbar. Die meisten Dinge werden mit dem Ziel entwickelt, sie schließlich auf den Kern zu portieren, wo sie stabilisiert und freigegeben werden. Einige Implementierungen werden jedoch nur als Referenz aufbewahrt und andere werden möglicherweise nie zum Abschluss gebracht. Hüte dich vor dem Jabberwock, mein Kind.
Der beste Weg, über JCTools zu diskutieren, ist das GitHub-Problemsystem. Jede Frage ist gut und GitHub bietet eine bessere Plattform für den Wissensaustausch als Twitter/Mailing-List/Gitter (oder zumindest denken wir das).
Wir haben freundlicherweise IntelliJ IDEA-Lizenzen von JetBrains erhalten, um bei der Entwicklung von JCTools zu helfen. Es handelt sich um eine großartige Suite von Tools, von denen die Entwickler und letztlich auch die Community profitiert haben.
Es ist ein großartiges und inspirierendes Unternehmen. KAUFEN SIE JETZT IHRE PRODUKTE!!!
JCTools erfreut sich eines stetigen Stroms an PRs, Vorschlägen und Benutzerfeedbacks. Es ist eine Gemeinschaft! Vielen Dank an alle, die mitgemacht haben!