Existe uma diferença entre fibras, corotinas e fios verdes e, se é assim, o que é?


57

Hoje eu estava lendo vários artigos na Internet sobre fibras, corotinas e fios verdes, e parece que esses conceitos têm muito em comum, mas há pequenas diferenças, principalmente quando falamos de fibras e corotinas.

Existe um resumo conciso e correto do que os diferencia?

Atualização: Acho o documento Distinguindo corotinas e fibras (rascunho do N4024 C ++) particularmente bom em diferenciar fibras e corotinas.

Respostas:


106

Uma fibra é um encadeamento leve que usa multitarefa cooperativa em vez de multitarefa preemptiva. Uma fibra em execução deve "ceder" explicitamente para permitir a execução de outra fibra, o que torna sua implementação muito mais fácil do que os threads do kernel ou do usuário.

Uma Coroutine é um componente que generaliza uma sub-rotina para permitir vários pontos de entrada para suspender e retomar a execução em determinados locais. Diferentemente das sub-rotinas, as corotinas podem sair chamando outras corotinas, que podem retornar mais tarde ao ponto em que foram invocadas na corotina original.

Um Thread Verde é um thread agendado por uma máquina virtual (VM) em vez de nativamente pelo sistema operacional subjacente. Os threads verdes emulam ambientes multithread sem confiar em nenhum recurso nativo do sistema operacional e são gerenciados no espaço do usuário em vez do espaço do kernel, permitindo que trabalhem em ambientes que não têm suporte de thread nativo.


13
Só posso dizer por mim mesmo - esta resposta é muito valiosa para mim. Eu compartilho opinião com Robert sobre isso.
precisa saber é o seguinte

"Os resumos de tópicos amplos são uma especialidade da Wikipedia, que é focada e otimizada para fornecer esse conteúdo e promover uma cultura orientada a ele. As pessoas que desejam, melhor capacidade e experiência em fornecer esses resumos vão à Wikipedia, não ao Stack Exchange ... As pessoas que procuram isso no mecanismo de pesquisa normalmente apresentam dois exemplos de conteúdo que competem diretamente, um na rede SE e outro na Wikipedia ... Devido às razões mencionadas acima, é mais provável que o conteúdo SE pareça inferior em comparação ... "
gnat

Observe que as corotinas e as fibras podem ser consideradas intimamente relacionadas - possivelmente até a mesma coisa. Se alguém quiser corotinas, elas podem ser implementadas através de fibras com muito pouco esforço e vice-versa.
cHao 23/08/14

9
Não explica como eles são diferentes. Todas essas definições parecem bastante equivalentes.
hasen

11
@gstackoverflow: os threads Java são threads do SO. A JVM os agenda através do sistema operacional.
Robert Harvey
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.