Suggerirei anche di guardare Christophe Grand's thread safe blocking queue; è meno di 20 righe, ma ha un sacco di funzionalità e, a mio parere, dimostra l'uso esperto di alcune caratteristiche di concorrenza di Clojure, immutabilità, atomi e sequenze pigre.
Considerare che l'alternativa Java java.util.concurrent.LinkedBlockingQueue is 842 lines di un codice commentato sottile (probabilmente complesso), e si inizia a capire come Clojure fornisce realmente la sua promessa di concorrenza; aumentare significativamente il livello di astrazione e fornire un'implementazione corretta con un codice di circa 10-20 volte inferiore.
Noterai anche che quando leggi il codice Java è davvero difficile vedere la foresta per gli alberi ... Se ti venisse dato potresti essere sicuro della sua correttezza guardandolo? Ricorda inoltre che questo codice è stato scritto da Doug Lea (probabilmente il più esperto di Java Concurrency) ed è per java altamente leggibile; Dubito fortemente che possa scrivere rapidamente un codice performante leggibile come questo in Java ed essere sicuro della sua correttezza.
Contrastare questo con la versione Clojure e una volta familiarizzato con le basi di Clojure è facile da sfatare e capire come funziona ... In 20 minuti sono stato in grado di capire ogni linea dell'implementazione ed essere sicuro della sua correttezza. E ora che ho molta più familiarità con gli idiomi e le FP di Clojure, immagino che questo mi porterebbe più vicino a 5 minuti. Probabilmente sarei anche in grado di scrivere un codice "corretto" come questo in Clojure in ore o minuti.
Christophes clojure wrapper della classe java precedente è anche istruttivo poiché condivide la stessa interfaccia funzionale della prima versione.
fonte
2010-06-01 11:55:06
Un bel blog su come spiegare le funzionalità: https: //perkss.github.io/#/clojure/ConcurrencyClojure # text-body – Matt