It&#x27;s been a while since I used Clojure, so I apologize if what I&#x27;m saying is wrong or out of date. Having used both Clojure and Go there are some significant differences in how coroutines work in each.<p>For instance, in Go making a blocking system call inside of a goroutine &quot;just works&quot; as Go will create additional goroutines as necessary. But if you do the equivalent in Clojure, you risk thread starvation.<p>&quot;However if you are using go blocks and blocking IO calls you&#x27;re in trouble. You will in fact often get worse performance than using threads (in the normal case) since you will quickly hog all the threads in the go block thread pool and block out any other work! ... Since the go block thread pool is quite small, it&#x27;s easy to block all the threads and thus stopping all &#x27;go processing&#x27;.&quot;[0]<p>Now there are some ways around this; I think that you can use promises for blocking IO inside of a Clojure coroutine. But this is one area where you don&#x27;t have to worry about this kind of thing in Go, even if you do have to know that the default map implementation isn&#x27;t thread safe. :)<p>[0] <a href="http:&#x2F;&#x2F;martintrojer.github.io&#x2F;clojure&#x2F;2013&#x2F;07&#x2F;07&#x2F;coreasync-and-blocking-io&#x2F;" rel="nofollow">http:&#x2F;&#x2F;martintrojer.github.io&#x2F;clojure&#x2F;2013&#x2F;07&#x2F;07&#x2F;coreasync-a...</a>