Java 21: Como funciona o Virtual Threads?

Поділитися
Вставка
  • Опубліковано 7 січ 2025

КОМЕНТАРІ • 53

  • @GustavoPereira-x3n
    @GustavoPereira-x3n Рік тому +10

    Pessoal, vale lembrar que esse recurso não é pra ser usado em todos os casos. Virtual Threads, como demonstrado no vídeo, são extremamente poderosas em cenários onde temos blocking das threads (por esperar um recurso do banco de dados, de outra API etc). Neste cenário, quando a thread é bloqueada, a JVM recupera o processo que está na fila e executa enquanto o recurso não é retornado (quando a thread está paranlisada aguardando, dizemos que ela está ociosa: idle). Uma vez que esse recurso é retornado, a thread pausa o processo que foi elicitado na vez e retoma o processo anterior para finalizar sua execução. E assim ocorre com todas as diversas threads que ele elicitar. A JVM tem a inteligência de fazer o manuseio desses recursos e elicitar processos novos enquanto aguarda o anterior, utilizando a mesma thread (ISSO É MUITO PODEROSO).
    Entretanto, a própria documentação alerta para não usar threads virtuais quando houver um processamento que não tenha blocking, pois neste cenário, a gente perde a vantagem do recurso da jvm elicitar novos processos na mesma thread enquanto aguardo o resultado. Usando threads virtuais em processo que não tenham blocking, iremos perder performance pois essa elicitação de processos na JVM rouba recursos da máquina e, neste caso, usando um recurso que na prática não servirá para nada.

  • @jeifersondealmeida534
    @jeifersondealmeida534 Рік тому +2

    Ótimo vídeo! Seria legal ter adicionado métricas de uso de memória também entre os comparativos para vermos como o VirtualThreads consegue gerenciar melhor o uso dela.

  • @maddytec
    @maddytec 4 місяці тому +1

    Parabéns Man

  • @Devertelo
    @Devertelo  Рік тому +2

    Lembrando que você encontra todos meus links aqui no linktr.ee/devertelo

  • @arthuraraujo68
    @arthuraraujo68 11 місяців тому +2

    Essa abordagem de concorrência onde a runtime tem o próprio mecanismo de escalonamento de rotinas assíncronas é comum em muitas linguagens/runtimes modernas como kotlin, go e nodejs. Acredito que essa feature é um baita avanço pra o java se manter utilizável para lidar com cenários de alta concorrência. Coisa que até então se resolvia trocando de linguagem :)

  • @ivansantos9474
    @ivansantos9474 Рік тому +1

    Massa essa nova feature
    Suma importância conhecer e saber manipular
    Abx!

    • @Devertelo
      @Devertelo  Рік тому

      Vai ajudar bastante na performance né? top demais

  • @gabrielbugarelli
    @gabrielbugarelli Рік тому +1

    Antes tarde do que nunca, que continue a evoluir sempre!

  • @GuilhermeCoradelloSilveira
    @GuilhermeCoradelloSilveira Рік тому +1

    Qual quer coisa ! uauauauauhu muito bom o video , obrigado

  • @pedroeuropeu
    @pedroeuropeu Рік тому +2

    que video top, explicação incrível! Muita sorte e sucesso irmão

  • @diiegors90
    @diiegors90 Рік тому +1

    muito massa o vídeo.
    Acredito que não seja algo que vamos lidar no dia a dia, mas para os frameworks é uma feature extremamente importante.

    • @Devertelo
      @Devertelo  Рік тому +2

      Para as grandes empresas que utilizam Java eu acredito que vai ser bem utilizado. Afinal o uso de processamento assíncrono é cada vez mais utilizado buscando performance.
      Agora, pra projetos pequenos talvez não necessite.

  • @Lucasmont001
    @Lucasmont001 Рік тому +1

    Rapaaaz, vídeo top!

  • @cleverson_lira
    @cleverson_lira Рік тому +1

    Obrigado pelo vídeo. Muito didático

  • @matheusenrico9779
    @matheusenrico9779 Рік тому +1

    Sensacional, obrigado pela explicação!

  • @rayana1205
    @rayana1205 Рік тому +1

    Muito legal, João! 👏🏽👏🏽

  • @MarcosOliveira-pn8xm
    @MarcosOliveira-pn8xm Рік тому +1

    Muito interessante, João. Valeu pelo vídeo!

  • @hsmiranda
    @hsmiranda Рік тому +1

    Bom video!

  • @ricardo-emerson
    @ricardo-emerson Рік тому +1

    Show man, parabéns!!

  • @oscarluizoliveira
    @oscarluizoliveira 4 дні тому +1

    Show de bola..bela explicação....mas gostaria de entender o motivo de 50000 ser mais lento que 100000 threads virtuais ?

    • @Devertelo
      @Devertelo  9 годин тому

      Obrigado!
      Nesse exemplo que eu fiz, quando foram rodar 50k de iterações, eu fixei o ThreadPool em 10k de threads virtuais. Então independentemente se a maquina aguentaria mais que 10k, a aplicação ficará travada no máximo de 10k de threads virtuais.
      Já no exemplo de 100k, eu tirei a configuração do ThreadPool e deixei para que o próprio Java gerenciasse o tamanho do Pool. Nisso, provavelmente, tinha recurso para mais de 10k de threads virtuais, tornando assim a execução das 100k iterações mais rápido que a de 50k.

  • @petroniobonavides3530
    @petroniobonavides3530 Рік тому +1

    Fala Jão.. viu lá a parada que te escrevi e sugeri?

    • @Devertelo
      @Devertelo  Рік тому +1

      Bom dia Petronio.
      Eu vi seu comentário sim, mas o youtube não está exibindo ele no vídeo pra responder.
      Está nos planos fazer vídeos no formato que você disse.
      Acompanhe o canal que em breve teremos.

  • @gabrielsilvagomes2121
    @gabrielsilvagomes2121 Рік тому +1

    com as threads sendo gerenciadas pela JVM, não posso ter um heapSpace ou um uso 'incontrolavel' dos recusos da JVM? (memoria e CPU)

    • @Devertelo
      @Devertelo  Рік тому

      Ainda não aprofundei em todas possibilidades de configurações, mas sei que é possível configurar o tamanho inicial e máximo das virtuais threads também.

  • @AlexFelipeDev
    @AlexFelipeDev Рік тому +2

    Boooa mano, a parte da performance é parecido com Coroutines! Se brincar, acho que vão usar isso no gerador de Bytecode de Kotlin para o target do JDK 21

    • @Devertelo
      @Devertelo  Рік тому +1

      To doido pra brincar um pouco com Kotlin também. Vou colocar na minha lista extensa de coisas a fazer rs.

    • @AlexFelipeDev
      @AlexFelipeDev Рік тому +2

      @@Devertelo sexta-feira vai ter um video de coroutines lá no canal, ein! 👀

    • @Devertelo
      @Devertelo  Рік тому +1

      @@AlexFelipeDev já vou deixar a notificação ativa haha

  • @henrique_cpp
    @henrique_cpp Рік тому +1

    Mano que tema é esse que vc tá usando?

    • @Devertelo
      @Devertelo  Рік тому

      ua-cam.com/video/ul92f2zpLYs/v-deo.html
      Da uma olhada aqui que falo todos os temas que utilizo no intellij

  • @Gabriel-wr5zw
    @Gabriel-wr5zw Рік тому +1

    Opa mano, tenho um forte conhecimento em javascript e node, porem desejo migrar pra java, poderia me informar algum curso para eu realizar ? voce pretendo soltar algum curso da linguagem?

    • @Devertelo
      @Devertelo  Рік тому +1

      Cara, se você tem uma base boa eu recomendo você a aprender o Java praticando mesmo. Se já tá acostumado com Javascript e Typescript vai ser bem fácil de se adaptar ao Java pois a linguagem é parecida em sintaxe. Recomendo tu ir criando projetos pessoais e assim ir aprendendo a base do Java. Vai e faz uma API REST, depois que tiver com domínio pula pro assíncrono, filas, etc. Agora se quer mesmo um curso eu recomendo consumir os conteúdos gratuitos do Guanabara e Loiane Groner

    • @Gabriel-wr5zw
      @Gabriel-wr5zw Рік тому

      Perfeito, vou dá uma olhadinha obrigado@@Devertelo

    • @Devertelo
      @Devertelo  Рік тому

      @@Gabriel-wr5zwtmj

    • @william_shokhan
      @william_shokhan 8 місяців тому +1

      Como dica recomendo também o Maratona Java Virado no Jiraya do William Suane tem várias playslists foda lá desde algoritmo com Java até spring boot e muito mais...

  • @nfrpaiva
    @nfrpaiva Рік тому +1

    Eu achei muito bom o vídeo, mas acho que a comparação de comparar um pool de 100 threads fixas com um pool com threads virtuais "ilimitado" não foi uma boa comparação.

    • @Devertelo
      @Devertelo  Рік тому

      Obrigado pelo feedback.

    • @renatocustodio1000
      @renatocustodio1000 Рік тому +2

      Ele deveria ter mostrado o consumo de memória. A questão é que essas 100 threads reais gastaram muito menos memória que as threads virtuais ilimitadas

    • @Devertelo
      @Devertelo  Рік тому +1

      @@renatocustodio1000 A ideia do vídeo não foi um benchmark, mas posso pensar em algo mais produzido pro futuro e trazer essas métricas.
      Mas acredito que as virtual threads consomem menos memória que as threads nativas do Java. Pelo menos alguns artigos que li mencionaram que consome mesmo memória.