Learn the fundamentals of core.async, a concurrency library for Clojure and ClojureScript that gives you tremendous power.
Video Courses
Screencasts, Whiteboards, and Slides produced to help you learn
core.async Patterns
Clojure core.async provides basic building blocks for communication and coordination. This course explores ten patterns you can easily implement using those building blocks.
Written Guides
Pragmatic and in-depth guides to a topic.
Clojure Concurrency Tutorial
From Agents to Executors, this guide covers all of the important concepts for concurrent programming in Clojure. It includes a comprehensive catalog of concurrency primitives.
Learning Paths
Curated selections of courses on a specific topic
The Everything Learning Path
If you’re looking to watch absolutely all of the courses on this site, I’ve put together a suggested order. Start at the beginning and just watch everything straight through. Be sure to click those checkmarks to track your progress.
Web Programming Learning Path
Web development is an extremely popular use for Clojure. If you want to learn web programming, here are the courses I recommend you watch. I am assuming you already are familiar with Clojure. Be sure to click those checkmarks to track your progress. Backend You’ll want to learn Ring. It is a unifying set of […]
Video Lessons
Parts of courses on specific topics
Assembly Line (Coordinating Between Processes)
In this lesson, things start getting serious. You’ve hired more workers, now they need to work together to build cars. And the common technique in factories is to use an assembly line. Learn to create patterns of communication between your processes using channels.
Backpressure
Backpressure is incredibly important in a distrubuted environment. Our servers can face more load than they can handle. Web requests are cheaper to produce than to respond to. The best practice when faced with more requests than you can handle is to immediately respond that you can’t handle it so that you can continue processing the requests you’ve already accepted.
Closing Shop (Stopping Processes)
This lesson addresses some issues that came up with the switch to conveyor belts. How do we tell everyone to stop working when the trucks are loaded and ready to ship? We don’t want them to keep building cars. Learn about how to close channels so that they don’t accept any more work.
Consolidate (Scaling the right jobs)
In this lesson, we finally consolidate the work and improve scalability by analyzing the diagram of our assembly line.
Conveyor Belts (Communicating using Channels)
Central to any modern factory are conveyor belts. In this lesson, you learn about buffers, which are like conveyor belts between go blocks.
Core Async
[Core Async](https://purelyfunctional.tv/guide/clojure-concurrency/#core.async) is a library for concurrency brought to us by the core Clojure team. I love it because it’s a game changer for complex concurrent tasks. It’s very versatile and can be used to implement many common patterns.
Download Resources
PDFs, code, and other downloads to help you learn
Clojure core.async Reference Sheet
Overwhelmed by the number of functions in Clojure core.async? This reference sheet shows you just the essentials in an easy-to-follow format.