Size: a a a

Clojure — русскоговорящее сообщество

2021 January 28

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Мы одно время кувыркались с кафкой и async, была даже своя либа для этого. Там не все так просто. Объект Consumer в кафке можно трогать только из того треда, в котором он создан, иначе будет исключение.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
да, это я понимаю. а с core.async  разве не так же? читаю из коннекта, беру список подписчиков из атома и им шлю
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
у меня не кафка, а apache pulsar
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Про пульсар я не в курсе, но все равно же будет какой-то тред, который поллит источник. Он явно будет жить в своем потоке.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Не создавать же новый Consumer на каждую итерацию
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
да, так и есть. у меня на яве выписан уже код через тред, вот думал, может какой сахарок в кложе есть...
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Проще Consumer в свой тред поселить и пусть там колбасится.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
тред тупо читае все сообщения из очереди и их публикует в  ConcurentQueue (это я на яве так делал),  аздесь тупо атом использую
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
я про треды и спрашиваю, может какой сахар есть?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Можно написать простой макрос with-thread, который принимает тело и возвращает экземпляр треда
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
но это несущественно
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(defmacro with-thread
 [& body]
 `(let [thread# (new Thread (fn [] ~@body))]
    (.start thread#)
    thread#))

(def t (with-thread (println 42)))

(.join t)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
а чтобы послать сообщение консьюмеру в тред, использовать атом, агент или промис
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Ivan Grishaev
(defmacro with-thread
 [& body]
 `(let [thread# (new Thread (fn [] ~@body))]
    (.start thread#)
    thread#))

(def t (with-thread (println 42)))

(.join t)
Код выглядит как плохой совет. Мне кажется, никогда так не правильно.
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Новичку, который даже не разбирался с async — предлагается писать макросы.
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
ну макросы все таки фундаментальны в clojure, тогда как core.async это библиотека
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
да и разобраться в них попроще (имхо) чем набить шишек с core.async
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Максоры — это всё-таки для продвинутых чуваков, иначе это слишком острый инструмент, который плодит говнокод со страшной силой.
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
А core.async — кор-библиотека примитивов асинхронности. Как мне кажется, макросы примерно через год после core.async стоит начинать использовать новичку.
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
но она (core.async) тоже на макросах почти полностью )
как без их понимания в ошибках разбираться?
источник