Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

JVM e mapeamento de Threads

Olá, boa tarde!! Minha dúvida refere-se a criação de threads e mapeamento desta. No caso, Java cria apenas threads nativas certo? Portanto,

  1. podemos considerar que a quantidade máxima que pode ser criada é a quantidade de núcleos da máquina?
  2. caso não se tenha núcleos suficientes, a JVM toma alguma ação??

Lembro do professor mencionando as green threads e também li a respeito. Em alguns lugares vi, o professor também menciona, que a partir de uma versão do Java não é mais implementado. Vi que alternativas seria uso de bibliotecas, como neste artigo Modelos de threading em Java... Mas ficou mesmo a dúvida, se quando houver a criação de mais threads que núcleos, tudo ficará bloqueado.

Desde já agradeço quem venha a responder o tema!

1 resposta
solução!

Olá, Isabela! Como vai?

Vamos lá, você tem duas perguntas bem interessantes. Vou tentar esclarecer cada uma delas:

  1. A quantidade máxima de threads que pode ser criada não é limitada pela quantidade de núcleos da máquina. Na verdade, você pode criar muitas threads, muito além do número de núcleos disponíveis. No entanto, o número de threads que podem ser executadas simultaneamente (ou seja, em paralelo) é limitado pelo número de núcleos, pois cada núcleo pode executar apenas uma thread por vez. Portanto, se você tem uma CPU de 4 núcleos, você pode ter, por exemplo, 1000 threads, mas apenas 4 delas serão executadas ao mesmo tempo, as outras estarão aguardando sua vez.

  2. Quando você cria mais threads do que o número de núcleos disponíveis, a JVM não bloqueia nada. O que acontece é que o sistema operacional começará a alternar as threads em execução nos núcleos disponíveis, um processo chamado de "context switching". Isso pode levar a uma sobrecarga, pois o sistema operacional precisa gerenciar quando e onde cada thread será executada. Portanto, embora possa parecer que todas as suas threads estão sendo executadas ao mesmo tempo, na realidade, elas estão sendo rapidamente alternadas nos núcleos disponíveis.

Em relação às "green threads", você está correta. As "green threads" eram threads simuladas inteiramente no espaço do usuário, em vez de serem threads nativas do sistema operacional. Elas foram usadas em algumas versões antigas do Java, mas não são mais usadas desde o Java 1.2.

Quando você cria mais threads do que núcleos, nem tudo fica bloqueado. Como mencionei, o sistema operacional começará a alternar as threads em execução nos núcleos disponíveis. Isso pode levar a uma sobrecarga, mas não bloqueia a execução.

Espero ter esclarecido as suas dúvidas e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.