Tópicos verdes vs tópicos não Verdes

Eu gostaria de entender as vantagens oferecidas por este tipo de threads.

  • em que ambientes os fios verdes são melhores do que os não-verdes? Alguns dizem que threads verdes são melhores para processadores multi-core.

  • quaisquer problemas de comportamento esperados.

Author: Peter Hall, 2011-04-19

7 answers

O Artigo da Wikipédia tópicos verdes explica muito bem.

Os tópicos verdes são "threads ao nível do utilizador". Eles são programados por um processo" normal " de nível de usuário, não pelo kernel. Então eles podem ser usados para simular multi-threading em plataformas que não fornecem essa capacidade.

No contexto de Java especificamente, threads verdes são uma coisa do passado. Ver este artigo . (É sobre Solaris, mas o fato de que os fios verdes não são mais usados é válido para as plataformas habituais).

As linhas verdes foram abandonadas no Sun JVM Para Linux a partir do lançamento da versão 1.3 (ver a tecnologia Java [tm] na plataforma Linux em archive.org). data de 2000. Para Solaris, threads nativos estavam disponíveis A partir de JDK 1.2. Isso data de 1998. Acho que nunca houve uma implementação de linha verde para o Windows, mas não consigo encontrar uma referência para isso.

Existem algumas exceções conforme anotado na Wikipédia artigo, reuno-me principalmente para dispositivos de baixa potência (incorporados).

 57
Author: Mat, 2015-03-15 13:17:07

A memória de linha verde é atribuída a partir do heap, em vez de ter uma pilha criada para ela pelo so. Isto pode potencialmente dar uma ordem de magnitude ou mais aumento em threads simultâneos. Como outras pessoas já mencionaram, isso não tiraria vantagem de múltiplos processadores automaticamente, no entanto, o caso de uso é tipicamente para bloquear I / O -- por exemplo, threads verdes podem permitir-lhe lidar com conexões simultâneas de 100k em oposição a 10k.

Por outras palavras, fios verdes são melhores para operações de IO com destino a uma certa escala.
 15
Author: Yike Lu, 2013-09-30 16:09:22

Os tópicos verdes são os tópicos implementados ao nível da aplicação e não no SO. Isto geralmente é feito quando o SO não fornece uma API thread, ou não funciona da maneira que você precisa.

Assim, a vantagem é que você tem funcionalidade tipo thread em tudo. A desvantagem é que os fios verdes não podem realmente usar múltiplos núcleos.

Houve alguns JVMs iniciais que usaram threads verdes( IIRC a porta JVM Blackdown Para Linux fez), mas hoje em dia todos os JVMs convencionais usam roupas verdadeiras. Pode haver alguns JVMs embutidos que ainda usam threads verdes.

 14
Author: Michael Borgwardt, 2011-04-19 07:48:44

Os fios verdes são significativamente mais rápidos do que os fios nativos quando têm fios mais activos do que os processadores.

Java inicialmente tinha suporte para threads verdes, mas ao contrário da maioria das implementações de threads verdes modernas, ele não poderia escalar sobre múltiplos processadores, tornando Java incapaz de utilizar múltiplos núcleos.

Em seguida, Java removeu a roscagem verde, a fim de confiar apenas em threads nativos. Isso fez com que os fios Java fossem mais lentos que os verdes.

Por favor, note que eu não sou especificamente falando sobre a implementação Java de threads verdes que tinham desvantagens, pois ao contrário de outras implicações de thread Verde não poderia escalar em um sistema multicore ou multiprocessador.

 5
Author: user1657170, 2016-08-11 20:49:41

Os tópicos verdes são os tópicos do nível do utilizador em vez dos tópicos do nível do 'kernel'. Eles são programados por bibliotecas de usuários ao invés do kernel. Você pode ter o seu próprio mecanismo de agendamento para agendar threads em vez de depender do programador do sistema operacional.

As threads verdes emulam ambientes multithreaded sem depender de quaisquer capacidades nativas do SO, e são geridas no espaço do utilizador em vez do espaço do kernel, permitindo-lhes trabalhar em ambientes que não têm thread native suporte

Executar:

Em um processador multi-core, implementações de thread nativas podem automaticamente atribuir trabalho a múltiplos processadores, enquanto implementações de thread verde normalmente não podem. Threads verdes superam significativamente os threads nativos do Linux na ativação e sincronização de threads.

Quando um tópico verde executa uma chamada de Sistema de bloqueio, não só esse tópico está bloqueado, como todos os tópicos dentro do processo estão bloqueados.

 3
Author: Aniket Thakur, 2016-02-09 03:50:38
Os fios verdes não estão marcados pelo so.

Isso significa que a programação para eles acontece no espaço do utilizador e não é tratada pelo kernel. Isto significa que os fios verdes geralmente não podem ser feitos para usar todos os núcleos DA CPU.

Para qualquer plataforma mainstream que execute Java nos dias de hoje (por exemplo, x86 ou x64), você estará usando threads reais.

 2
Author: kittylyst, 2011-04-19 07:55:15

Java multi-Threading é implementado por dois modelos:

  1. Modelo De Fio Verde
  2. Modelo os nativo

Modelo de Thread Verde: O Thread que é gerenciado pela JVM, sem tomar suporte de SO subjacente é chamado de Thread Verde. Muito poucos so como Sun Solaris fornecem suporte para o modelo de fio verde. Está desactualizada e não é recomendada a sua utilização.

Native OS Model: The Thread which is manged by the JVM with the help of underlying O OS é chamado de modelo os nativo. Todos OS Windows OS fornecem suporte para o modelo os nativo.

 0
Author: Raman Gupta, 2017-10-07 07:25:37