Kanały core.async i bloki go
Oprócz refs i atoms biblioteka core.async wprowadza do Clojure współbieżność w stylu CSP. Ta lekcja uczy kanałów, bloków go i koordynowania pracy asynchronicznej za pomocą komunikujących się procesów.
Kanały core.async i bloki go to bezpłatna lekcja Clojure Functional Programming & JVM Backend Development na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Clojure Functional Programming & JVM Backend Development, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Clojure Functional Programming & JVM Backend Development zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
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.
Często zadawane pytania
Czy lekcja „Kanały core.async i bloki go” jest bezpłatna?
Tak — pełny tekst „Kanały core.async i bloki go” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Clojure Functional Programming & JVM Backend Development, przejdź na CoddyKit PRO. Kurs Clojure Functional Programming & JVM Backend Development zawiera 4 lekcji w sumie.
Co nauczysz się w „Kanały core.async i bloki go”?
Oprócz refs i atoms biblioteka core.async wprowadza do Clojure współbieżność w stylu CSP. Ta lekcja uczy kanałów, bloków go i koordynowania pracy asynchronicznej za pomocą komunikujących się procesów. Ćwiczysz Clojure Functional Programming & JVM Backend Development z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Clojure Functional Programming & JVM Backend Development?
Nie wymagamy żadnego doświadczenia. Clojure Functional Programming & JVM Backend Development w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Kanały core.async i bloki go”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Clojure Functional Programming & JVM Backend Development?
Tak. Każda lekcja Clojure Functional Programming & JVM Backend Development zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Refs, Agents i Atoms do zarządzania stanem
- Transakcyjna pamięć współdzielona (STM)
- Promises, Futures i operacje asynchroniczne
- Kanały core.async i bloki go