Canales y bloques go de core.async
Además de refs y atoms, core.async incorpora concurrencia al estilo CSP en Clojure. En esta lección aprenderá sobre canales y bloques go, y a coordinar trabajo asíncrono mediante procesos comunicantes.
Canales y bloques go de core.async es una lección gratuita de Clojure Functional Programming & JVM Backend Development en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Clojure Functional Programming & JVM Backend Development, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Clojure Functional Programming & JVM Backend Development incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
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.
Preguntas frecuentes
¿La lección «Canales y bloques go de core.async» es gratis?
Sí — el texto completo de «Canales y bloques go de core.async» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Clojure Functional Programming & JVM Backend Development, actualiza a CoddyKit PRO. El curso de Clojure Functional Programming & JVM Backend Development incluye 4 lecciones en total.
¿Qué aprenderé en «Canales y bloques go de core.async»?
Además de refs y atoms, core.async incorpora concurrencia al estilo CSP en Clojure. En esta lección aprenderá sobre canales y bloques go, y a coordinar trabajo asíncrono mediante procesos comunicante… Practicas Clojure Functional Programming & JVM Backend Development con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Clojure Functional Programming & JVM Backend Development?
No se requiere experiencia previa. Clojure Functional Programming & JVM Backend Development en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Canales y bloques go de core.async»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Clojure Functional Programming & JVM Backend Development?
Sí. Cada lección de Clojure Functional Programming & JVM Backend Development incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Refs, Agents y Atoms para la gestión del estado
- Memoria transaccional de software (STM)
- Promises, Futures y operaciones asíncronas
- Canales y bloques go de core.async