Fios Verdes vs Fios Não Verdes

Eu gostaria de entender as vantagens fornecidas por esse tipo de encadeamento.

O artigo da Wikipedia Green Threads explica isso muito bem.

Os encadeamentos verdes são “encadeamentos no nível do usuário”. Eles são agendados por um processo “normal” em nível de usuário, não pelo kernel. Assim, eles podem ser usados ​​para simular multi-threading em plataformas que não fornecem essa capacidade.

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

Os encadeamentos verdes foram abandonados na Sun JVM para Linux a partir do lançamento da versão 1.3 (consulte Tecnologia Java [tm] na plataforma Linux em archive.org). Isso remonta a 2000. Para o Solaris, os encadeamentos nativos estavam disponíveis no JDK 1.2. Isso remonta a 1998. Eu nem sequer acho que já houve uma implementação de thread verde para o Windows, mas não consigo encontrar uma referência para isso.

Há algumas exceções, conforme observado no artigo da Wikipedia, que eu conheço principalmente para dispositivos de baixa potência (incorporados).

A memory do encadeamento verde é alocada a partir do heap, em vez de ter uma pilha criada para ele pelo SO. Isso pode potencialmente dar uma ordem de grandeza ou mais aumentos nos encadeamentos simultâneos. Como outras pessoas mencionaram, isso não tiraria proveito de vários processadores automaticamente, no entanto, o caso de uso é tipicamente para bloqueio de E / S – por exemplo, encadeamentos verdes podem permitir que você manipule 100k conexões simultâneas em oposição a 10k.

Em outras palavras, os encadeamentos verdes são melhores para operações de encadernação de E / S em uma determinada escala.

Os encadeamentos verdes são encadeamentos implementados no nível do aplicativo, e não no sistema operacional. Isso geralmente é feito quando o sistema operacional não fornece uma API de encadeamento ou não funciona da maneira que você precisa.

Assim, a vantagem é que você obtém a funcionalidade do tipo thread. A desvantagem é que os segmentos verdes não podem usar vários núcleos.

Havia algumas JVMs iniciais que usavam encadeamentos verdes (a porta JVM do Blackdown IIV para o Linux), mas atualmente todas as JVMs mainstream usam encadeamentos reais. Pode haver algumas JVMs incorporadas que ainda usam encadeamentos verdes.

Os encadeamentos verdes são significativamente mais rápidos que os encadeamentos nativos quando possuem encadeamentos mais ativos que os processadores.

Inicialmente, o Java tinha suporte para encadeamentos verdes, mas, diferente da maioria das implementações modernas de encadeamento ecológico, ele não podia escalar em vários processadores, tornando o Java incapaz de utilizar vários núcleos.

Em seguida, o Java removeu o encadeamento verde para confiar apenas nos encadeamentos nativos. Isso fez com que os segmentos Java fossem mais lentos que os segmentos verdes.

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

Encadeamentos verdes são encadeamentos no nível do usuário em vez de encadeamentos no nível do kernel. Eles são agendados por bibliotecas de usuários em vez do kernel. Você pode ter seu próprio mecanismo de agendamento para agendar threads, em vez de confiar no agendador do sistema operacional.

Os encadeamentos verdes emulam ambientes multithread sem depender de nenhum recurso nativo do SO e são gerenciados no espaço do usuário em vez do espaço do kernel, permitindo que eles trabalhem em ambientes que não possuem suporte a encadeamentos nativos

Performace:

Em um processador com vários núcleos, as implementações de encadeamentos nativos podem atribuir automaticamente o trabalho a vários processadores, enquanto as implementações de encadeamento verde normalmente não podem. Os encadeamentos verdes superam significativamente os encadeamentos nativos do Linux na ativação e synchronization de encadeamentos.

Quando um encadeamento verde executa uma chamada de sistema de bloqueio, não apenas esse encadeamento é bloqueado, mas todos os encadeamentos dentro do processo são bloqueados.

Tópicos verdes não são agendados pelo sistema operacional.

Isso significa que o agendamento para eles acontece no espaço do usuário e não é tratado pelo kernel. Isso significa que as linhas verdes geralmente não podem ser usadas para usar todos os núcleos da CPU.

Para qualquer plataforma mainstream rodando Java atualmente (por exemplo, x86 ou x64), você estará usando threads reais.

O JAVA Multi-Threading é implementado por dois modelos:

  1. Modelo de rosca verde
  2. Modelo nativo do sistema operacional

Modelo de Encadeamento Verde: O Encadeamento que é gerenciado pela JVM, sem ter suporte ao SO subjacente, é chamado de Encadeamento Verde. Muito poucos sistemas operacionais como o Sun Solaris fornecem suporte para o modelo de encadeamento verde. Está obsoleto e não é recomendado o uso.

Modelo de SO Nativo: O Thread que é gerenciado pela JVM com a ajuda do SO subjacente é chamado de Modelo de SO Nativo. Todas as janelas do sistema operacional fornecem suporte para o modelo nativo do sistema operacional.