Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GDG 2023 - Java Virtual Threads

GDG 2023 - Java Virtual Threads

Avatar for Gustavo Lima

Gustavo Lima

May 25, 2023
Tweet

More Decks by Gustavo Lima

Other Decks in Programming

Transcript

  1. Globalcode – Open4education $whoami Gustavo Lima • Bacharel em Ciência

    da Computação @Fumec • Engenheiro de Software @Itaú https://www.linkedin.com/in/gvlima/ https://github.com/gvlima _gvlima
  2. Globalcode – Open4education Java Virtual Threads • Project Loom: incubate

    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)
  3. Globalcode – Open4education Java Virtual Threads “... to use virtual

    threads effectively, there is more unlearning than learning to be done.” Brian Goetz
  4. Globalcode – Open4education Java Threads • Platform Threads • java.lang.Thread

    • Wrapper nas threads de sistema operacional • Paridade entre threads de sistema operacional e threads de plataforma
  5. Globalcode – Open4education Java Threads • Platform threads é um

    recurso limitado • Alto consumo de memória • Troca de task requer troca de contexto (kernel) • Aumento de throughput está relacionado ao hardware
  6. Globalcode – Open4education Java Threads • Thread-per-request (platform thread =

    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
  7. Globalcode – Open4education Programação síncrona • Legibilidade de código •

    Fit com a linguagem (controle de fluxo, exceptions, ferramentas, etc) • Sub-utilização de hardware (operações de I/O)
  8. Globalcode – Open4education Programação Assíncrona • Opção para otimizar o

    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
  9. Globalcode – Open4education Programação Assíncrona • Novo paradigma de programação

    • 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
  10. Globalcode – Open4education Java Virtual Threads • java.lang.Thread • Lightweight

    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)
  11. Globalcode – Open4education Java Virtual Threads • Java virtual threads

    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
  12. Globalcode – Open4education Java Virtual Threads • Gerenciado pela JVM

    (sem troca de contexto) • M:N scheduling • Poucas carrier threads
  13. Globalcode – Open4education Como usar Virtual Threads • Utilizar blocking

    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
  14. Globalcode – Open4education Virtual Thread Pinning • Evitar o Pinning

    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
  15. Globalcode – Open4education Referências • Virtual Threads: New Foundations for

    High-Scale Java Applications (Brian Goetz, Daniel Briant): https://www.infoq.com/articles/java-virtual-threads/ • Java Loom Project: https://wiki.openjdk.org/display/loom/Main • JEP 436: Virtual Threads (Second Preview): https://openjdk.org/jeps/436 • JEP 444: Virtual Threads: https://openjdk.org/jeps/444