Equivalent of Goroutines in Clojure / Java

Issue

I recently enjoyed watching the Google IO talk on Go Concurrency patterns

Although the Go approach to concurrency (groutines, communication over channels) is clearly different to Clojure (immutability, manged references, STM), it seemed like the Go approach could still be useful in some circumstances in a Clojure context.

So is there a direct equivalent in Clojure or Java for Go’s concurrency primitives (perhaps a library), in particular:

  • channel-like objects that block until a reader and writer are available at both ends
  • A select-like construct that can wait for results on multiple channels

P.S. Perfectly happy with a Java solution since it would be easy to use from Clojure

UPDATE Since the question was originally asked, Clojure now has core.async which provides all this functionality and more.

Solution

You should check out core.async. It is a library written by Rich Hickey that implements go style channels.

Answered By – sbochins

Answer Checked By – Pedro (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.