Domanda

Sto cercando di trovare le differenze tra ciò che Clojure chiama uno STM e ciò che è implementato in Haskell come STM. Prendendo le lingua attuale differenze semantiche parte sono un po 'confuso, come Rich Hickey dice nel suo discorso che l'attuazione di Clojure di STM è molto diverso da qualsiasi cosa là il resto fuori, ma non capisco le differenze a parte la scelta della lingua.

È stato utile?

Soluzione

Clojure STM ha 3 grandi caratteristiche uniche:

  1. Utensili MVCC snapshot evitando operazioni di riavvio sulla invalidazione di lettura.
  2. riferimenti assicura su read-scrive fornisce una sorta di controllo manuale ordine di acquisizione delle risorse.
  3. ha pendolari esplicito che riduce tentativi sulla scrittura commutativa.

Altri suggerimenti

Per Haskell STM, vedere le carte di SPJ: http: / /research.microsoft.com/en-us/um/people/simonpj/papers/stm/

Di particolare l'uso sono "operazioni di memoria Composable" e "memoria transazionale con invarianti di dati". implementazione di GHC di STM in effetti non è MVCC. Non ricordo tutti i dettagli di implementazione, ma la mia comprensione è che la descrizione sui giornali non è poi così diverso da quello che esiste attualmente in GHC.

(si noti che MVCC, in clojure o altrove, rende write-skew possibile - vedi, ad esempio, qui: http://en.wikipedia.org/wiki/Snapshot_isolation )

Mark Volkmann ha fatto una presentazione molto dettagliata su STM in generale (e STM di Clojure in particolare) a Strano Anello 2009, che è possibile trovare qui (articolo e diapositive qui ). Io non so davvero di qualsiasi altra risorsa (diverso dal codice) per capire il funzionamento del MCS Clojure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top