and deliver Java VM features and APIs built on top of them for the purpose of supporting easy-to-use, high-throughput lightweight concurrency and new programming models on the Java platform) • JEP 425 (Preview JDK 19) • JEP 436 (Second Preview JDK 20) • JEP 444 (JDK 21)
thread OS) • Cada request consome uma thread durante a execução • A thread fica bloqueada durante todo tempo da execução • Maior a quantidade de threads, maior o throughput
uso de hardware • Em operações I/O a thread é “devolvida” ao pool (non-blocking approach) • A concorrência não não é limitada pelo número de threads • O número de requisições atendidas pode ser maior que o número de threads disponíveis
• Novo conjunto de APIs • A plataforma Java é organizada em threads • Impacto em observabilidade Exceptions: contexto da thread executada no momento Debugger: passo a passo da execução de uma thread Profiler (JFR): agrupa eventos em torno de threads
Thread • M:N onde M>N (M: Virtual Threads, N: OS Threads) • Poucas carrier threads para um número grande de virtual threads • Baixo custo para troca de contexto • Melhor utilização do hardware (near-optimal hw utilization)
são executadas por platform threads também chamadas de carrier threads • Platform thread executa uma única virtual thread por vez • Novas Virtual Threads são enfileiradas • Não há time slicing entre as virtual threads
APIs • Evitar o uso de thread pools, utilizar thread per task • Evitar utilizar variáveis thread-local • Transformar uma task em uma virtual thread • Virtual threads não são recursos, são objetos de lógica de negócio
Um processo leva muito tempo para ser concluído (blocking I/O) É executado em modo synchronized É executado com muita frequência • Essa combinação pode impactar a escalabilidade inerente das virtual threads