core.async
The goal of core.async is to decouple producers and consumers of
information in software, without dictating specific thread or blocking
semantics, and without introducing callback hell. Also, to do all of this
as a library, portable anywhere you can run a dialect of Clojure.
Queues are a powerful tool for decoupling software
programs. Unfortunately, platforms that have powerful queueing
libraries (e.g. Java) may require blocking threads on the ends of the
queue. And the world's biggest platform (JavaScript in the browser)
doesn't even have queues or threads.
core.async builds upon the work done with Communicating Sequential
Processes,
and provides:
- facilities for independent threads of activity, communicating via
queue-like channels - both real threads and shared use of thread
pools (in any combination), as well as ClojureScript on JS engines
In this talk, we will cover the design of core.async, and then move
directly to exploring core.async's capabilities:
- Creating unbuffered and buffered channels
- Threaded put
>!!
and take<!!
- Using
go
blocks to invert control, achieving async without threads - IOC put
>!
and take<!
- Simultaneously waiting for multiple operations with
alts!
andalts!!
- Timeouts as “just another kind of channel”
Finally, we will assemble these primitives into substantial working
programs, building toward the Holy Grail of async: substantial UI
application development in the browser, with no callbacks in sight.
About Stuart Halloway
Stuart Halloway is a founder and President of Cognitect, Inc. (www.cognitect.com). He is a Clojure committer, and a developer of the Datomic database.
Stuart has spoken at a variety of industry events, including StrangeLoop, Clojure/conj, EuroClojure, ClojureWest, SpeakerConf, QCon, GOTO, OSCON, RailsConf, RubyConf, JavaOne, and NFJS.
Stuart has written a number of books and technical articles. Of these, he is most proud of Programming Clojure.
Learn more about Stu's presentations on his wiki.
More About Stuart »