Il commentatore qui offre le seguenti critiche ai fili verdi:
Inizialmente sono stato venduto sul modello N: M come mezzo per avere la programmazione guidata dagli eventi senza l'inferno di callback. Puoi scrivere codice che assomiglia a un vecchio codice procedurale, ma sotto c'è una magia che utilizza il cambio di attività dello spazio utente ogni volta che qualcosa si blocca. Suona alla grande. Il problema è che finiamo per risolvere la complessità con più complessità. swapcontext () e la famiglia sono piuttosto stretti in avanti, la complessità proviene da altri luoghi non intenzionali.
All'improvviso sei costretto a scrivere uno scheduler dello spazio utente e indovinare cosa è davvero difficile scrivere uno scheduler che farà un lavoro migliore rispetto ai programmi di Linux che hanno anni di sforzi. Ora vuoi che il tuo programma gestisca N thread verdi su M thread fisici, quindi devi preoccuparti della sincronizzazione. La sincronizzazione porta problemi di prestazioni in modo da iniziare ora che sei in una nuova tana di coniglio senza blocco. Costruire uno scheduler altamente simultaneo corretto non è un compito facile.
Un'altra critica è qui :
Un singolo processo che simula più thread ha molti problemi. Uno di questi è che tutti i fili falsi si bloccano su qualsiasi errore di pagina.
La mia domanda è - si -go Lang goroutines di (per un pool di default) a soli fili verdi? In tal caso, affrontano le critiche sopra?