2015-04-03 10 views
10

Libertà di runtime: il sistema di runtime di Rust e il modello di threading verde sono stati completamente rimossi, riducendo la dimensione binaria statica di "hello world" a metà e aprendo la porta ai hook di livello inferiore nella libreria standard. Implementato da Aaron Turon.Perché Rust ha rimosso il modello di threading verde; qual è lo svantaggio?

http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html

Qual è lo svantaggio del modello di green-threading?

Perché Erlang è così veloce?

+1

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.) –

+1

@ 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

risposta

29

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.

+2

Giusto, ma non abbiamo ancora verdi in Rust, perché alcuni interni di Rust utilizzano TLS ed è impossibile mutiplex verdi su thread OS come Go o Erlang. Dobbiamo ancora lavorare per risolverlo ... – DenisKolodin

Problemi correlati