Utilizzando linguaggi di programmazione Clojure DataFlow
-
14-10-2019 - |
Domanda
Qualcuno può spiegare perché e come vorrei utilizzare l'API di programmazione Clojure Dataflow come io non riesco a trovare molto su di esso su internet.
Soluzione
Credo che sia più utile leggere altre informazioni su ciò che a flusso di dati di programmazione è. IMHO, il Groovy GPars ragazzi hanno alcuni dei migliori documentazione su flusso di dati . I GPars mailing list hanno avuto un sacco di discussione su flusso dati vs CSP vs attori ecc in passato ed è un ottimo posto per fare domande.
Alcuni altri link utili:
- Data Flow concorrenza in Groovy - Vaclav Pech (GPars)
- scorre con i dati - Vaclav Pech (GPars)
- Seleziona flusso di dati - Vaclav Pech (GPars)
- esempio dall'articolo GPars - Alex Miller
- Presentazione - Jonas Boner (Akka / Scala)
- Wikipedia ovviamente
Il Clojure impl è piuttosto scarno, in pratica costruendo variabili di flusso di dati in cima refs e guardare le funzioni su tali rif. Si potrebbe trovare il codice vero e proprio href="https://github.com/clojure/clojure-contrib/blob/master/modules/dataflow/src/main/clojure/clojure/contrib/dataflow.clj"> o le prove di href="https://github.com/clojure/clojure-contrib/blob/master/modules/dataflow/src/test/clojure/clojure/contrib/test_dataflow.clj"> più utile la documentazione.
L'esempio canonico citata con flusso di dati variabili è quella di un foglio di calcolo, in cui ogni variabile è una cella nel foglio definito dai valori di altre celle. Quando cambia una cella, i cambiamenti ripple in avanti in ordine di dipendenza. Flusso di dati variabili stesse sono un po 'limitati anche se -. Credo che i flussi di flusso di dati sono dove l'idea diventa più interessante
In un certo senso, l'idea di nodi di elaborazione leggeri linea su uno (solitamente più piccolo) gruppo di fili fissi, ciascuno collegato da coda simile flussi descrive ad un livello molto elevato tutti {dataflow flussi, attori, CSP}. L'obiettivo è in ogni caso di mantenere un elevato throughput, mantenendo nodi che hanno del lavoro da fare lavorare e non sprecare cicli sui nodi che non e agli utenti evitare di gestire le discussioni esplicite e serrature (disaccoppiato tramite le code / flussi / canali tra di loro ).