In quali modi significativi Erlang impedisce le condizioni di gara nella programmazione concorrente?


11

Leggendo sulla concorrenza in Erlang , mi viene in mente il toolkit di concorrenza Akka . Entrambi ti offrono strumenti per prevenire o limitare le condizioni di gara . Ma puoi inviare collegamenti a dati mutabili ad altri processi usando il toolkit Akka, che non è ancora sicuro. Vedo Akka come uno strumento utile, ma non fornisce protezione dall'accesso fuori ordine a oggetti e dati che portano a condizioni di competizione, deadlock e / o fame. Non ti impedisce di scrivere codice non sicuro nel modo in cui Java o C # ti proteggono dalla scrittura della maggior parte dei tipi di perdite di memoria che puoi scrivere in C ++ (puoi comunque creare perdite di memoria in Java ingannando il garbage collector, ma è meno di un problema rispetto a dover ricordare di liberare ogni byte assegnato).

Erlang garantisce un certo grado di correttezza, prestazioni e robustezza nella programmazione concorrente? Penso che i sistemi operativi forniscano protezione quando si accede alle risorse di sistema (supponendo che gli autori dei driver abbiano fatto bene il loro lavoro). I database ACID forniscono protezione per letture e aggiornamenti. Quindi sembra che questo sia un problema risolvibile. O una soluzione sicura generica cancellerebbe i guadagni in termini di prestazioni offerti dalla concorrenza? Altre lingue o toolkit offrono il tipo di sicurezza concorrente che Erlang fa (o non fa)?

Questa è una domanda di follow-up al commento di @ Malfist sulla risposta di @ user1249 a Quale linguaggio di programmazione genera meno bug difficili da trovare? .

Risposte:


19

Ci sono alcune cose che Erlang fa per aiutarle.

  • I dati sono immutabili, quindi nessun dato corre
  • I gen_servers e i gen_fsm di OTP forniscono un modello molto ben collaudato per i server
  • I supervisori consentono il ripristino da arresti anomali
  • i processi sono piccoli ed economici
  • La memoria viene allocata in base al processo (nessun GC si blocca)
  • la VM erlang è ottimizzata per funzionare con carichi molto pesanti
  • Il software può essere aggiornato al volo, quindi nessun downtime di aggiornamento

La cosa principale qui è che in Erlang non esiste uno stato condiviso che potrebbe richiedere un blocco, quindi non è necessario alcun blocco. È un linguaggio brillante per le applicazioni soft in tempo reale che non richiedono tempi di inattività, elevata tolleranza agli errori e concorrenza


12
@JarrodRoberson: In realtà, il punto principale non è uno stato mutabile condiviso . Lo stato di condivisione non è un problema se non lo muti. Lo stato mutevole non è un problema se non lo si condivide.
Jörg W Mittag,

1
C'è anche un nuovo strumento Concuerror youtube.com/watch?v=FpkjKN9wTKg che ti consente di eseguire i test con tutti i possibili ordini di eventi
Zachary K
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.