Channels core.async et blocs Go
Au-delà des références et des atomes, core.async apporte la concurrence de style CSP à Clojure. Cette leçon vous apprend à utiliser les Channels, les blocs go et la coordination du travail asynchrone avec des processus communicants.
Channels core.async et blocs Go est une leçon Clojure Functional Programming & JVM Backend Development gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Clojure Functional Programming & JVM Backend Development, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Why core.async
Atoms and refs manage shared state. core.async manages communication between independent processes using channels, inspired by CSP.
Requiring the Library
Pull in the core functions you will use.
(require '[clojure.core.async :as a
:refer [chan go >! <! <!! >!!]])Creating a Channel
A channel is a queue that processes use to hand off values. Create one with chan.
(def c (chan))
; an unbuffered channelGo Blocks
A go block runs its body asynchronously on a thread pool, parking instead of blocking at channel operations.
(go (println "running asynchronously"))Putting and Taking
Inside a go block, >! puts a value and <! takes one. Both park until the other side is ready.
(let [c (chan)]
(go (>! c 42))
(go (println "got" (<! c))))Blocking Variants
Outside go blocks, use the double-bang forms >!! and <!!, which block the real thread. Useful at the REPL or in main.
(let [c (chan)]
(go (>! c "hello"))
(println (<!! c)))Buffered Channels
Give a channel a buffer so puts do not park until the buffer is full. This decouples fast producers from slower consumers.
(def c (chan 10))
; up to 10 values can sit in the bufferSelecting With alts!
alts! waits on several channels at once and proceeds with whichever is ready first, enabling timeouts and racing.
(go
(let [[v ch] (a/alts! [c (a/timeout 1000)])]
(println "got" v "from" ch)))Closing Channels
Closing a channel signals no more values. Takes then return nil, which consumers use as a stop signal.
(a/close! c)
; subsequent <! returns nilPipelines of Processes
Wire go blocks together with channels to form a pipeline: each stage takes from one channel, transforms, and puts onto the next. State stays local to each process.
Channels vs Atoms
Use atoms/refs for shared mutable state; use channels to coordinate the flow of work between processes. They solve different problems and often combine.
Quick Check
Test your core.async knowledge.
Recap
You learned channels, go blocks, parking puts/takes, blocking variants, buffers, alts! for selection and timeouts, closing channels, and how channels complement atoms and refs.
Questions Fréquemment Posées
La leçon « Channels core.async et blocs Go » est-elle gratuite ?
Oui — le texte complet de « Channels core.async et blocs Go » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Clojure Functional Programming & JVM Backend Development, passe à CoddyKit PRO. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Channels core.async et blocs Go » ?
Au-delà des références et des atomes, core.async apporte la concurrence de style CSP à Clojure. Cette leçon vous apprend à utiliser les Channels, les blocs go et la coordination du travail asynchrone… Tu pratiques Clojure Functional Programming & JVM Backend Development avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Clojure Functional Programming & JVM Backend Development ?
Aucune expérience préalable n'est requise. Clojure Functional Programming & JVM Backend Development sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Channels core.async et blocs Go » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Clojure Functional Programming & JVM Backend Development ?
Oui. Chaque leçon Clojure Functional Programming & JVM Backend Development inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Refs, agents et atomes pour gérer l'état
- Mémoire transactionnelle logicielle (STM)
- Promesses, futures et opérations asynchrones
- Channels core.async et blocs Go