Хороший пример параллелизма Java по сравнению с Clojure

Clojure, как говорят, является языком, который делает мультипоток, программирующий легче.

С веб-сайта Clojure.org:

Clojure упрощает многопоточное программирование несколькими способами.

Теперь я ищу нетривиальную проблему, решенную в Java и в Clojure, таким образом, я могу сравнивать/контрастировать их простоту. Кто-либо?

17
задан Michiel Borkent 26 May 2010 в 17:58
поделиться

3 ответа

Я бы посоветовал также посмотреть на очередь блокировки потоков Кристофа Гранда ; он менее 20 строк, но содержит много функциональных возможностей и, на мой взгляд, демонстрирует опытное использование некоторых функций параллелизма, неизменяемости, атомов и ленивых последовательностей Clojure.

Учтите, что альтернатива Java java.util.concurrent.LinkedBlockingQueue представляет собой 842 строки тонкого (возможно, сложного) закомментированного кода, и вы начнете понимать, как Clojure действительно выполняет свои обещания параллелизма; значительно повысив уровень абстракции и предоставив правильную реализацию примерно в 10-20 раз меньше кода.

Вы также заметите, что при чтении кода Java действительно трудно увидеть лес за деревьями ... Если бы вам дали его, могли бы вы убедиться в его правильности, посмотрев на него? Также имейте в виду, что этот код был написан Дугом Ли (возможно, ведущим экспертом по параллелизму Java) и для java хорошо читается; Я очень сомневаюсь, что смогу быстро написать такой читаемый высокопроизводительный код на Java и быть уверенным в его правильности.

Сравните это с версией Clojure, и, однажды познакомившись с основами Clojure, легко разобраться и понять, как это работает ... В течение 20 минут я смог понять каждую строчку реализации и убедиться в ее правильности . И теперь, когда я лучше знаком с идиомами и FP Clojure, я думаю, это займет у меня около 5 минут. Я также, вероятно, смог бы написать такой «правильный» код на Clojure за часы или минуты.

Christophes clojure wrapper вышеупомянутого класса Java также поучителен, поскольку он использует тот же функциональный интерфейс, что и первая версия.

13
ответ дан 30 November 2019 в 13:33
поделиться

См. Пример Муравьев Ричарда Хикки - он показывает, как использовать функции clojure для создания параллельных программ

4
ответ дан 30 November 2019 в 13:33
поделиться

Проект Wide Finder , начатый Тимом Брэем, имеет ряд статей на Clojure, наиболее известная из которых принадлежит Алексу Осборну; он сделал фантастическую рецензию по ней, а также статьи по Java, Scala и впечатляющему количеству других языков.

Решаемая проблема полностью практична и довольно интересна как задача параллелизации, и сообщения Тима об этом (см. Также более позднюю серию Wide Finder 2 ) довольно приятно читать (и содержат хорошие образовательные ценить). Плюс текст Алекса действительно великолепен, пожалуйста, прочтите его, даже если вы решите пропустить остальное. Он использует некоторые специфические для Clojure функции (например, Atoms) наряду с вещами, перенесенными из Java, если он выполняет свою работу хорошо и быстро ... Фактически, это было бы интересно только тем, как оно демонстрирует превосходное взаимодействие Clojure с Java.

В общем, я бы сказал, что это, наверное, лучшее, с чего начать.

5
ответ дан 30 November 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: