Инструменты Java Concurrency для JVM. Цель этого проекта — предложить некоторые параллельные структуры данных, которые в настоящее время отсутствуют в 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, чтобы обеспечить лучшую поддержку, пути обновления и обсуждение. Плагин Shade для Maven/Gradle — это предпочтительный способ объединения JCTools с вашей библиотекой. Примеры доступны в проекте ShadeJCToolsSamples.
JCTools тестируется с использованием как тестов JMH, так и тестовых программ, собранных вручную. Тесты и соответствующие инструкции можно найти в README модуля jctools-benchmarks. Расскажите нам, как это работает на вашем оборудовании.
mvn package
cd jctools-concurrency-test
java -jar target/concurrency-test.jar -v
Экспериментальная работа доступна в модуле jctools-experimental. Большая часть материала разрабатывается с прицелом на то, чтобы в конечном итоге перенести его в ядро, где оно будет стабилизировано и выпущено, но некоторые реализации сохраняются исключительно для справки, а некоторые могут никогда не выйти в свет. Берегись Бармаглота, дитя мое.
Лучший способ обсудить JCTools — в системе вопросов GitHub. Любой вопрос хорош, и GitHub предоставляет лучшую платформу для обмена знаниями, чем Twitter/список рассылки/gitter (по крайней мере, мы так думаем).
Компания JetBrains любезно предоставила нам лицензии IntelliJ IDEA для помощи в разработке JCTools. Это отличный набор инструментов, который принес пользу разработчикам и, в конечном итоге, сообществу.
Это потрясающая и вдохновляющая компания, ПОКУПАЙТЕ ИХ ПРОДУКЦИЮ СЕЙЧАС!!!
JCTools получает постоянный поток отзывов, предложений и отзывов пользователей. Это сообщество! Спасибо всем за участие!