
Explore the basics of core.async primitives, understand how CSP relates to chorusing, and learn to apply chorusing primitives in closure applications.
Timothy Baldrige introduces himself as a software engineer with over 20 years of experience, describing his work with closure and the core.async library and sharing deeper insights into core.async.
Create channels with core.async to implement CSP, enabling multiple writers and readers with blocking put and take. Demonstrate first-in, first-out behavior and interleaved values in a many-to-many channel.
Explore asynchronous operations on channels using put and take, enabling non-blocking communication and callbacks. Learn how channels act as handoffs, with values flowing only after corresponding takes complete.
Explore core.async buffers, including fixed size, sliding, and dropping buffers, and how put and take operations interact to block, interleave, or drop values for rate limiting.
Learn how to close a core.async channel, deliver pending puts, and emit nil to future takes, using close and buffering semantics, with a when-some loop example.
Use the thread macro to run closure bodies in separate JVM threads and return values via a many-to-many channel, illustrating parallelism and core async interaction.
Explore core.async lightweight threads with the go macro producing clean code. See how put! and take! parking manage channels, and how the macro rewrites to callbacks for functionally pure IO.
Wrap a callback-based http-kit client in a core.async channel to expose a simple request–response flow, parse JSON with Cheshire, and fetch IMDB data.
Learn to interface with an async Cassandra database using core.async, creating a connection and session, executing async queries, and streaming results via a channel.
Show how to coordinate access to blocking IO by using a single logging channel and a thread to serialize standard output from multiple futures.
Explore back pressure in core.async using channels, go blocks, and puts and takes to show producers pausing for consumers. Add a channel buffer to compare throughput and memory use.
Explore how to tune back pressure in core.async pipelines by using buffers, parallelism, and channel configurations across a four-step assembly line to balance throughput.
Explore backpressure pitfalls in core.async, including 1024 pending puts on a channel, puts buffers, and strategies like blocking or parking puts and using go blocks to handle streaming results safely.
Explore core.async alts to take a value from one of two channels, with buffers, returning the value and its source channel to prevent race conditions and randomize selection.
Demonstrates using alt! and alts to take from channels C1 and C2 without blocking by supplying a default when no value is available, returning either a value or the default.
demonstrates how to use alts with priority true in core.async to enforce a given channel order and select from C1 or C2.
Learn how to merge values from multiple channels into a single channel using core.async merge. Explore buffer options, the return channel, and automatic closure when inputs close.
Broadcast a single value to multiple channels using core.async's mult and tap, creating a mult from an input channel and taps, so every value goes to both taps.
Examine the pub sub API in async, routing input values to S1 and S2 by a topic function that distinguishes positive from negative values, with subscription and graceful shutdown.
Explore draining channels with reduce and into in core.async, treating channels as collections and returning channels that yield a vector or set after the input closes.
Explore how transducers solve reducing inside map and filter by abstracting the reducing logic for flexible outputs in core.async.
Explore the three parts of transducer functions and how a reducing function, input collection, and output collection enable transformations over collections in a transducer chain.
Learn how to apply transducers to core.async channels, creating and wiring channels with map, filter, and partition transducers, and understand performance constraints and safe usage.
Learn how pipeline and pipeline blocking transform values across input and output channels with a transducer, using parallelism while preserving input order.
Use pipeline-async in core.async to build a parallel pipeline that maps inputs to http requests via transducers, fetches and parses responses, and preserves input order.
Depict a data flow with input and output channels moving usernames through avatar retrieval, image resizing, and database storage in a multi-stage pipeline; tune buffers and parallelism via config.
Explore how core async channels model a many-to-many channel with takes, puts, buffers, and transducers, including closure, nil handling, and a 1024-item queue.
Explore how alt handlers interact with channels and the do alts transaction, including locks, commits, and the shared alt flag that ensures a single callback.
Explain how go blocks interface with channels in core.async by transforming code with the IOC state machine, enabling continuation passing style and async terminators for take, put, and return.
Understand how the thread macro interfaces with channels in core async, including thread call, a promise, and take blocking and put blocking, on the JVM.
In this Communicating Sequential Processes with core.async training course, expert author Timothy Baldridge will teach you the basics of core.async. This course is designed for users that already have a working knowledge of Clojure and ClojureScript.
You will start by learning how to create channels, then jump into creating and using threads. From there, Timothy will teach you how to combine and split channel streams, work with transducers, and the pipeline abstraction. This video tutorial also provides a quick tour of core.async internals, including how channels are modeled, how alt handlers interact with channels, and how threads interface with channels. Finally, you will learn about non-blocking channel operations and how to put it all together.
Once you have completed this computer based training course, you will be fully capable of writing your own applications that take advantage of the core.async library.