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
Concurrency
You’ve heard that Clojure is great for concurrency. But what tools does Clojure give you? And how should you use those tools?
These lessons are meant to each answer a specific question and help you build the skills you need to address a wide variety of concurrency problems.
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.
Technical Articles
Clojure’s unsung heroics with concurrency
People know about the immutable data structures and the STM. But there’s something going on at a much deeper level that is really hard to get right in Java. It has to do with the optimizations the JIT will run on your code.
Learning Paths
Curated selections of courses on a specific topic
Beginner Programmer Learning Path
Clojure can be an excellent language to learn programming. The following courses should set you on a good path for getting up to speed in Clojure. Be sure to click those checkmarks to track your progress. Start with the best introduction to Clojure out there. It gently guides you through the language with fun exercises. […]
Object-Oriented Programmer Learning Path
If you’re coming to Clojure from an Object-Oriented Programming background, this page is for you. Be sure to click those checkmarks to track your progress. Start with the best introduction to Clojure out there. It gently guides you through the language with fun exercises. You’ll learn the syntax and the thought processes behind Clojure programming. […]
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
Agents
Agents are another reference type. Each one has a queue of work to be run on it, and those bits of work get run in a thread pool. They’re great because each Agent is a unit of parallelization. Three Agents mean three things can run at the same time.
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.
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.
The Ultimate Guide to Clojure Concurrency Code
Code to accompany The Ultimate Guide to Clojure Concurrency and the Clojure Concurrency Course. It’s example code for a variety of concurrency primitives.