Ferramentas de simultaneidade Java para JVM. Este projeto visa oferecer algumas estruturas de dados concorrentes atualmente ausentes do JDK:
Variações SPSC/MPSC/SPMC/MPMC para filas simultâneas:
As filas de array vinculado SPSC/MPSC (limitadas e ilimitadas) oferecem um equilíbrio entre desempenho, alocação e espaço ocupado
Filas de array vinculadas ilimitadas baseadas em MPSC/MPMC XAdd oferecem custos de contenção reduzidos para produtores (usando XADD em vez de um loop CAS) e blocos de fila agrupados para alocação reduzida.
Uma interface de fila expandida (MessagePassingQueue):
Muitas filas estão disponíveis nas variações Unsafe
(padrão, usa sun.mic.Unsafe
) e Atomic
(dependendo de AtomicFieldUpdater
), bem como Unpadded
(menos espaço removendo o compartilhamento falso, evitando o preenchimento de campo).
Há mais por vir e contribuições/sugestões são bem-vindas. JCTools tem contado com o apoio da comunidade e contribuições na forma de problemas/testes/documentação/código o ajudaram a crescer. JCTools oferece excelente desempenho a um preço razoável (GRÁTIS! sob a licença Apache 2.0). É estável e está em uso por estruturas distintas como Netty, RxJava e outras. JCTools também é usado por produtos comerciais com ótimos resultados.
Adicione a versão mais recente como uma dependência usando Maven:
< dependency >
< groupId >org.jctools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >4.0.3</ version >
</ dependency >
Ou use a versão incrível, construída a partir do código-fonte, https://jitpack.io/. Você precisará adicionar o repositório Jitpack:
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
E configure a seguinte dependência:
< dependency >
< groupId >com.github.JCTools.JCTools</ groupId >
< artifactId >jctools-core</ artifactId >
< version >v4.0.3</ version >
</ dependency >
Você também pode depender do snapshot mais recente deste repositório (ao vivo no limite) definindo a versão como '4.0.5-SNAPSHOT'.
JCTools é construído em maven e requer uma instalação existente do Maven e JDK8 (apenas para construção, o tempo de execução é compatível com 1.6).
Com 'MAVEN_HOME/bin' no caminho e JDK8 definido como 'JAVA_HOME', você poderá executar "mvn install" a partir deste diretório.
Embora você seja livre para copiar e estender o JCTools, preferiríamos que você tivesse uma dependência versionada do JCTools para permitir melhor suporte, caminhos de atualização e discussão. O plugin shade para Maven/Gradle é a maneira preferida de fundir o JCTools com sua biblioteca. Exemplos estão disponíveis no projeto ShadeJCToolsSamples.
JCTools é avaliado usando benchmarks JMH e chicotes manuais. Os benchmarks e instruções relacionadas podem ser encontrados no README do módulo jctools-benchmarks. Vá à loucura e conte-nos como foi o desempenho no seu hardware.
mvn package
cd jctools-concurrency-test
java -jar target/concurrency-test.jar -v
O trabalho experimental está disponível no módulo jctools-experimental. A maior parte do material é desenvolvida com o objetivo de eventualmente portá-lo para o núcleo, onde será estabilizado e lançado, mas algumas implementações são mantidas apenas para referência e algumas podem nunca ser graduadas. Cuidado com o Jabberwock, meu filho.
A melhor maneira de discutir JCTools é no sistema de problemas do GitHub. Qualquer pergunta é boa, e o GitHub oferece uma plataforma melhor para compartilhamento de conhecimento do que twitter/mailing-list/gitter (ou pelo menos é o que pensamos).
Recebemos gentilmente licenças IntelliJ IDEA da JetBrains para auxiliar no desenvolvimento de JCTools. É um ótimo conjunto de ferramentas que beneficiou os desenvolvedores e, em última análise, a comunidade.
É uma empresa incrível e inspiradora, COMPRE SEUS PRODUTOS AGORA!!!
JCTools tem desfrutado de um fluxo constante de PRs, sugestões e comentários de usuários. É uma comunidade! Obrigado a todos por se envolverem!