Erlang utilizza thread verdi con prelazione. Questo è possibile solo perché Erlang ha una VM, che consente anche molte altre cose come il codice hotswap. Ma le lingue con VM non sono adatte alla programmazione di sistemi perché hanno sempre un sovraccarico costante, sia in termini di memoria che di potenza di elaborazione. Rust è un linguaggio di programmazione dei sistemi e quindi non può avere un sistema runtime significativo. Vorrei anche aggiungere che Erlang non è veloce. È notoriamente inefficace nei calcoli numerici, ad esempio - vedi here. Il suo modello di concorrenza consente un throughput elevato per le operazioni di I/O, ma questa è una cosa diversa.
Quindi, per supportare i thread verdi in modo fattibile, una lingua deve avere una sorta di runtime. Le ragioni della rimozione del runtime in Rust sono descritte nel corrispondente RFC. In breve, il modello di runtime utilizzato in Rust in quel momento era difficile da lavorare con efficienza e difficile da migliorare, pur non avendo i vantaggi sufficienti a causa dei problemi di implementazione e dei vincoli generali dovuti all'API, quindi è stato scartato. Per quanto ne so, nulla in linea di principio impedisce a qualcuno di scrivere un runtime basato su thread verde per Rust, ma nessuno lo ha ancora fatto.
fonte
2015-04-03 10:27:02
In Java erano più lenti dei thread nativi. (Anche se ricordo che la BEAM VM di Erlang utilizza thread verdi, sembra abbastanza veloce per i loro casi d'uso.) –
@ GáborBakos Early JVMs aveva 1: N threading verde, cioè c'era solo un thread del SO che eseguiva tutto N Thread Java. Naturalmente questo non può beneficiare delle CPU multi-core. Sia Erlang che Rust precedenti, e anche Go utilizzano il threading N: M, dove i thread N OS cooperano per eseguire M thread verdi. – delnan