sto guardando Clojure core.async per la prima volta, e stava attraversando questo eccellente presentazione da Rich Hickey: http://www.infoq.com/presentations/clojure-core-asyncCome si eliminano i canali core.async di clojure?
avevo una domanda circa l'esempio che mostra al termine della sua presentazione:
Secondo Rich, questo esempio tenta fondamentalmente di ottenere un risultato Web, video e immagine per una query specifica. Prova due fonti diverse in parallelo per ognuno di questi risultati, e tira fuori il risultato più veloce per ciascuno. E l'intera operazione non può richiedere più di 80 ms, quindi se non possiamo ottenere ad es. un risultato di immagine in 80 ms, ci arrenderemo. La funzione "più veloce" crea e restituisce un nuovo canale e avvia due processi di corsa racing per recuperare un risultato e inserirlo nel canale. Quindi prendiamo il primo risultato dal canale 'più veloce' e lo schiaffiamo sul canale c.
La mia domanda: cosa succede a questi tre canali temporali, senza nome, "più veloci", dopo il primo risultato? Presumibilmente c'è ancora un processo di go che è parcheggiato cercando di mettere il secondo risultato sul canale, ma nessuno sta ascoltando, quindi non è mai stato effettivamente completato. E poiché il canale non è mai legato a nulla, non sembra che abbiamo mai avuto modo di fare qualcosa con esso. Il processo di go processing & "realizzerà" che a nessuno importa più dei loro risultati e si pulisce? O abbiamo essenzialmente "perso" tre canali/processi in questo codice?
Hmm, ok. Ora ho due risposte contrastanti da te e Leon. Saresti stato in grado di fornire un riferimento per il tuo reclamo? – Ord
Sì, si prega di collegare ai dettagli di implementazione. Inoltre, ti preghiamo di spiegare come funziona nel codice sopra riportato. –
E. g. prendi il blocco go in L4: supponiamo che 'c' stia bloccando il put. 'più veloce' fa un secondo put che non viene consumato. Quando esattamente, nell'esempio di codice sopra, sono 'c' e il canale restituito dalla raccolta dei dati più veloce raccolta? –