Я пытаюсь убедить себя, что clojure действительно проще, чем Java для параллельного программирования.- это Clojure Refs/do-sync только эквивалент java «синхронизированного» блока?
, но я чувствую, что Clojure Refs/do-sync почти точно совпадает с java-синхронизированным блоком. то я прочитал эту тему: Clojure STM (dosync) x Java synchronize block
--- Я перезапускаю новый поток, так как, если я прокомментирую там в старой ветке, ответ может быть не очень высоким из-за старости.
первый комментарий этой темы от Michał Marczyk утверждает, что diff заключается в том, что блок синхронизации java использует блокировки, в то время как Clojure использует транзакции. Я думаю, что это утверждение не затрагивает сути проблемы: внизу транзакции по-прежнему реализуются шлюзами. поэтому «java using locks» не является причиной того, что Clojure лучше.
Я думаю, что реальная выгода заключается в том, что транзакции Clojure управляет замками автоматически, так же, как DB транзакции. таким образом, порядок приобретения блокировок и порядок воспроизведения транзакций определяются менеджером транзакций, поэтому программисту не нужно заботиться об этом, в то время как в java-мире программист должен явно выбрать, какую блокировку использовать для блок синхронизации, что приводит к возможным взаимоблокировкам. менеджер транзакций может использовать двухфазную блокировку, например, чтобы избежать взаимоблокировок.
ли это имеет смысл?
благодаря Ян
+1 к этому. Также добавление собственного ответа, поскольку это мой старший ответ, который явно вызван вопросом, и есть некоторые дополнительные комментарии, которые я хотел бы сделать. –