Size: a a a

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

2021 March 14

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
а если точнее? go-тред -- это своя обертка над обычным тредом?
в clj над пулом тредов
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну это понятно, там обычный ThreadPoolExecutor. Изначально был не ясен термин "паркуется"
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
это чтобы отличить от "блокируется", для настоящих тредов
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
ибо <!! цельный Java тред лочит
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
ну это понятно, там обычный ThreadPoolExecutor. Изначально был не ясен термин "паркуется"
ну это термин из документации

(defn >!
 "puts a val into port. nil values are not allowed. Must be called
 inside a (go ...) block. Will park if no buffer space is available.
 Returns true unless port is already closed."
 [port val]
 (assert nil ">! used not in (go ...) block"))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну это термин из документации

(defn >!
 "puts a val into port. nil values are not allowed. Must be called
 inside a (go ...) block. Will park if no buffer space is available.
 Returns true unless port is already closed."
 [port val]
 (assert nil ">! used not in (go ...) block"))
(defn <!
 "takes a val from port. Must be called inside a (go ...) block. Will
 return nil if closed. Will park if nothing is available."
 [port]
 (assert nil "<! used not in (go ...) block"))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Да, это я видел. Но до сих пор не разобрался, как именно происходит эмуляция грин-тредов. У нас просто на работе все на manifold
источник

IG

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

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
Ivan Grishaev
Да, это я видел. Но до сих пор не разобрался, как именно происходит эмуляция грин-тредов. У нас просто на работе все на manifold
есть вероятность, что концепт похож на async / await в js, только сложнее
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
вообще нужно покурить)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Собственно документация на go
  "Asynchronously executes the body, returning immediately to the
 calling thread. Additionally, any visible calls to <!, >! and alt!/alts!
 channel operations within the body will block (if necessary) by
 'parking' the calling thread rather than tying up an OS thread (or
 the only JS thread when in ClojureScript). Upon completion of the
 operation, the body will be resumed.

 go blocks should not (either directly or indirectly) perform operations
 that may block indefinitely. Doing so risks depleting the fixed pool of
 go block threads, causing all go block processing to stop. This includes
 core.async blocking ops (those ending in !!) and other blocking IO.

 Returns a channel which will receive the result of the body when
 completed"
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
Ivan Grishaev
на core.async табу
А почему, если не секрет?)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Vladimir Pavlyuk
А почему, если не секрет?)
сам толком не понял. У CEO были какие-то трудности, которых не было в manifold. И кроме того, последний предлагает полный стек, в т.ч. для  веб-сервера и клиента
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
стек называется aleph. Если пишешь на нем, то в core.async и правда смысла нет -- manifold уже из коробки
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
Ivan Grishaev
сам толком не понял. У CEO были какие-то трудности, которых не было в manifold. И кроме того, последний предлагает полный стек, в т.ч. для  веб-сервера и клиента
Интересно, нужно будет посмотреть на него)
Спасибо)
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
Ivan Grishaev
стек называется aleph. Если пишешь на нем, то в core.async и правда смысла нет -- manifold уже из коробки
понял
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
Да, это я видел. Но до сих пор не разобрался, как именно происходит эмуляция грин-тредов. У нас просто на работе все на manifold
так в манифолде есть про back pressure?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
по мне так manifold и core.async несколько про разное, хотя про первый я знаю только из его документации
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
так-то у меня core.async в небольших количествах в специфических местах, обычно простых future за глаза...
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Sergey Trofimov
так в манифолде есть про back pressure?
в докладе автора на ютубе что-то есть про него, а так в доках не встречал
источник