C'è una differenza tra fibre, coroutine e fili verdi e se è così che cos'è?


57

Oggi stavo leggendo diversi articoli su Internet su fibre, coroutine e fili verdi, e sembra che questi concetti abbiano molto in comune, ma ci sono lievi differenze, specialmente quando parliamo di fibre e coroutine.

Esiste un riassunto conciso e corretto di ciò che li rende diversi l'uno dall'altro?

Aggiornamento: trovo il documento Distinguishing coroutines and fibres (N4024 C ++ draft) particolarmente efficace nel differenziare tra fibre e coroutine.

Risposte:


106

Una fibra è un thread leggero che utilizza il multitasking cooperativo anziché il multitasking preventivo. Una fibra in esecuzione deve "cedere" esplicitamente per consentire l'esecuzione di un'altra fibra, il che rende la loro implementazione molto più semplice rispetto ai thread del kernel o dell'utente.

Una Coroutine è un componente che generalizza una subroutine per consentire più punti di ingresso per sospendere e riprendere l'esecuzione in determinate posizioni. A differenza delle subroutine, le coroutine possono uscire chiamando altre coroutine, che possono in seguito tornare al punto in cui sono state invocate nella coroutine originale.

Un thread verde è un thread pianificato da una macchina virtuale (VM) anziché nativamente dal sistema operativo sottostante. I thread verdi emulano ambienti multithread senza fare affidamento su alcuna capacità del sistema operativo nativo e sono gestiti nello spazio utente anziché nello spazio del kernel, consentendo loro di lavorare in ambienti che non supportano il thread nativo.


13
Posso solo dire da solo: questa risposta è molto preziosa per me. Condivido l'opinione con Robert su questo.
DejanLekic,

"I riassunti di argomenti di ampia portata sono la specialità di Wikipedia, che è focalizzata e ottimizzata sulla fornitura di questi contenuti e sulla promozione di una cultura orientata su di essi. Le persone disponibili, meglio capaci ed esperte nel fornire tali riassunti vanno su Wikipedia, non su Stack Stack ... Le persone che cercano questo nel motore di ricerca verrebbero in genere presentate due esempi di contenuti direttamente in competizione, uno sulla rete SE, un altro su Wikipedia ... A causa dei motivi sopra menzionati, è molto probabile che il contenuto di SE sembrerebbe inferiore in confronto ... "
moscerino del

Nota, le coroutine e le fibre potrebbero essere considerate abbastanza strettamente correlate, forse anche la stessa cosa. Se si volessero le coroutine, possono essere implementate tramite fibre con il minimo sforzo e viceversa.
cHao,

9
Non spiega come sono diversi. Tutte queste definizioni sembrano piuttosto equivalenti.
hasen

1
@gstackoverflow: i thread Java sono thread del sistema operativo. La JVM li pianifica attraverso il sistema operativo.
Robert Harvey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.