Недавно мне понравилось наблюдать за разговорами Google IO о шаблонах параллельной работы Go
Хотя подход Go к параллелизму (groutines, связь по каналам) явно отличается от Clojure (неизменяемость, управляемые ссылки, STM), казалось, что подход Go может быть полезен в некоторых случаях в контексте Clojure.
Таким образом, существует прямой эквивалент в Clojure или Java для примитивов параллелизма Go (возможно, библиотеки), в частности:
-
channel
-like объектов, которые блокируются до тех пор, пока читатель и писатель не будут доступны с обоих концов -
select
-like, которая может ждать результатов по нескольким каналам
PS Прекрасно доволен решением Java, поскольку он был бы легко использовать из Clojure
ОБНОВЛЕНИЕ Поскольку вопрос был первоначально задан, у Clojure теперь есть core.async, который обеспечивает все эти функции и многое другое.