Why should an article about common lisp mention a clojure library? Because of the parentheses?
Because of CSP
As I understand it, there are multiple ways to do concurrency in Clojure. Is there a best way or a way that fits most use cases so that you should at least try feature X before features Y, Z, and/or roll your own?
There is no easy path you can follow sadly. It depends on your use case quite a bit. Clojure gives you a lot of options and you have to find your own way.
What Clojure gives you by default, are thread safe mutation constructs, atoms, agents and refs that help a lot if you want to do simply concurrent things without worrying about race conditions.
Clojure also has support to get some data parallelism, you can easily do a lot with reducers and transducers. Its quite nice.
For more complex stuff, core.async gives you a powerful CSP library, its as powerful as what the Go programming language gives you (I think its nicer because Go has statements instead of expressions).
Because Clojure is on the JVM, you get access to all the Java stuff, java.util.conncurrent, and you can get a lot of powerful tools there (ThreadPools and stuff like that).
The reason, sadly; is that I lack experience with clojure.async, I lost my motivation before I got there; a couple of years ago it was still too experimental for my taste, didn't offer enough advantages over CL, lacked fundamentals like error handling and was tied to the mountain of complexity called JVM.
As someone who programs in both Clojure and Go there's absolutely nothing I miss from CSP in Go, and I would much rather do concurrent programming in Clojure.
Rationale: http://clojure.com/blog/2013/06/28/clojure-core-async-channe...
Code: https://github.com/clojure/core.async/blob/master/examples/w...
Presentations: https://github.com/clojure/core.async#presentations