Java 19 Virtual Thread — Você deve usá-lo?
Este blog é a Parte 1 de uma série de 2 partes, explicando o que são encadeamentos virtuais no Java 19 , como os encadeamentos virtuais podem melhorar o desempenho do aplicativo e, finalmente, alguns benchmarks usando encadeamentos virtuais.
O que são threads virtuais:
Já que o ChatGPT é o novo Google , vamos perguntar a ele sobre a definição de “Tópicos Virtuais em Java19" (sempre dava definições diferentes e significativas, parabéns aos criadores dessa belezura!!!)
Os encadeamentos virtuais são um tipo de encadeamento leve no Java 19. Os encadeamentos virtuais permitem que os usuários criem um grande número de encadeamentos, sem experimentar a sobrecarga associada aos encadeamentos tradicionais. Os encadeamentos virtuais são gerenciados pela Java Virtual Machine, para que possam ser reutilizados conforme necessário e permitir melhorias substanciais de desempenho quando comparados ao uso de encadeamentos nativos tradicionais.
Para os amantes de GoLang por aí, tópicos virtuais para rotina nada mais são do que 'irmão de outra mãe'
Por que os threads virtuais são úteis
Os encadeamentos virtuais Java são diferentes dos encadeamentos da plataforma original no sentido de que os encadeamentos virtuais são muito mais leves em termos de quantos recursos (RAM) eles exigem do sistema para serem executados . Assim, você pode ter muito mais threads virtuais em execução em seus aplicativos do que threads de plataforma. O tempo todo, oferecendo a você todos os benefícios de um encadeamento de plataforma normal.
Uso de threads virtuais
A criação de um thread virtual em java é semelhante à criação de um thread Runnable convencional. No entanto, estaremos usando a classe Executors, para criar newVirtualThreadPerTaskExecutor (), que inicia um novo Thread virtual para cada tarefa. O número de threads criados pelo Executor é ilimitado.
Teste
Neste teste, chamarei um serviço externo (que leva 1 milissegundo para responder) e executarei a operação 1 milhão de vezes usando a plataforma convencional e threads virtuais.
Objetivo:
Comparar o tempo gasto por threads virtuais versus threads convencionais para concluir a operação 1 milhão de vezes.
Especificações da máquina: 10 núcleos, 16 GB de memória.
Código:
Roscas convencionais
Eu só podia usar no máximo até 1000 threads e estava recebendo um erro OOM.
Tópicos Virtuais
Resultados :
Abaixo está o uso da CPU + o tempo gasto por ambas as abordagens para executar o loop for externo 10 vezes.
Roscas convencionais
Tópicos virtuais
Conclusão:
O uso da diferença de tempo em preto e branco de aparências de encadeamentos convencionais versus virtuais nos dá um vencedor claro para o uso de encadeamentos virtuais, caso estejamos esperando por algum serviço externo. Se extrapolarmos este exemplo para 10 milhões ou 100 milhões de chamadas, a diferença torna-se significativamente maior e os encadeamentos virtuais surgem como os de melhor desempenho quando o aplicativo está envolvido na espera de algum aplicativo externo.
O exemplo imitou a chamada de um serviço externo usando Thread.sleep(), que pode ser substituído por uma chamada real para um serviço externo. Isso fica como exercício para o leitor. FAÇA ISSO!!!
NOTA: É verdade que por tentativa e erro, podemos otimizar o número de criação de threads convencionais, embora não seja possível prever o número perfeito de threads para cada caso de uso (se você mantiver aleatoriamente um pool com threads maiores , você está desperdiçando recursos do aplicativo desnecessariamente). Usar uma alocação dinâmica de threads (threads virtuais) faz muito mais sentido em um aplicativo do mundo real.
Problemas com o uso de Threads Virtuais
O exemplo acima apenas fez você perceber que o thread virtual é o negócio quente e, para acelerar seus aplicativos e otimizar a utilização de sua CPU, devemos sempre criar threads virtuais.
Quem dera tudo não viesse com um “ MAS ”.
Threads virtuais em Java são ótimos, mas caso seu aplicativo não seja limitado por E/S, ou seja, se a própria CPU precisar fazer algum processamento pesado (como treinar um modelo ou contar até 100 milhões), usar threads virtuais não é a escolha ideal.
Os detalhes disso serão dados na 2ª parte deste artigo. Fique atento!!!
Pensamentos finais
A introdução do Java 19 aos sistemas ainda está em fase de desenvolvimento (já que o projeto Loom está apenas em fase de visualização por enquanto), embora esperemos ver grandes melhorias no gerenciamento do servidor, tempos de resposta de API mais rápidos e problemas de OOM menos frequentes.
Sobre o autor :
Yash Bansal é engenheiro principal associado da RedBus. Mais informações sobre ele podem ser encontradas em seu perfil no LinkedIn .





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)