Size: a a a

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

2020 September 02

k

k0rs4r in Clojure — русскоговорящее сообщество
alex
я смутно помню что у нетти под капотом тоже nio, как фолбек под все платформы, и выбор всяких epoll для линуха и тд. С файловой системой тоже самое?
Мой посыл был больше в том что из синхронного clojure.java.io (использующего FileInputStream/FileOutputStream под капотом ) не выйдет сделать ассинхронное просто обернув в go-блоки, поток будет блокироваться.
Но если задача просто для практики и было просто желание разобраться с core.async то думаю всё ок )
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
alex
а я подумал вы админ, а мы "дети" =)
тоже на секунду, ы
источник

a

alex in Clojure — русскоговорящее сообщество
k0rs4r
Мой посыл был больше в том что из синхронного clojure.java.io (использующего FileInputStream/FileOutputStream под капотом ) не выйдет сделать ассинхронное просто обернув в go-блоки, поток будет блокироваться.
Но если задача просто для практики и было просто желание разобраться с core.async то думаю всё ок )
эт я понял, думал может знаешь дополнительную магию нетти и поделишься =) ну кроме удобного api, по сравнению с nio
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Roman
а можно попросить вас сделать что-то типа code review маленького проекта? (всего 32 строчки)
докстринги странноваты, не по гайду

ну и по core.async из принципиального — внутри go блоков не надо делать блокирующие операции
в твоём случае здесь https://github.com/reflechant/json-diff/blob/editscript/src/json_diff/core.clj#L21 go нужно заменить на thread, который тоже возвращает канал
источник

k

k0rs4r in Clojure — русскоговорящее сообщество
alex
эт я понял, думал может знаешь дополнительную магию нетти и поделишься =) ну кроме удобного api, по сравнению с nio
Дополнительная магия netty заключается в том что Norman Maurer смог реализовать его без такого колличества локов. Где-то был скрин с кодом nio, там на ~10 строк кода было 4 лока, 15 минут искал эту презентацию но не смог найти, последний раз видел её в 17 году по-моему, похоже её больше нет в сети.
На счет io в fs по-моему там есть что-то, гуглить по zero-copy file transfer, но самому мне не приходилось это использовать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Roman
а можно попросить вас сделать что-то типа code review маленького проекта? (всего 32 строчки)
а вообще для такого https://github.com/reflechant/json-diff/blob/editscript/src/json_diff/core.clj#L26-L29 есть https://clojuredocs.org/clojure.core.async/pipeline-blocking, который соберёт все запросы в ответы с указанным параллелизмом

но только тут нужен будет не вектор каналов, а один входящий канал, куда пихаются аргументы для обработки
источник

R

Roman in Clojure — русскоговорящее сообщество
Я сделал два канала чтобы не перепутать порядок файлов
источник

R

Roman in Clojure — русскоговорящее сообщество
Надо бы поподробнее посмотреть как core.async работает. В Go делать блокирующие операции, особенно IO, в горутинах - классика
источник

a

alex in Clojure — русскоговорящее сообщество
да вроде на jvm работает, с ограниченным пулом потоков)
источник

k

k0rs4r in Clojure — русскоговорящее сообщество
Roman
Надо бы поподробнее посмотреть как core.async работает. В Go делать блокирующие операции, особенно IO, в горутинах - классика
полагаю, это можно будет в jvm ток когда релизнется Project Loom
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Roman
Надо бы поподробнее посмотреть как core.async работает. В Go делать блокирующие операции, особенно IO, в горутинах - классика
Clojure в этом отношении не Go
Thread pool небольшой, рассчитан на CPU-bound операции
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Roman
Надо бы поподробнее посмотреть как core.async работает. В Go делать блокирующие операции, особенно IO, в горутинах - классика
насколько я знаю, там свой тред-пул
источник

a

alex in Clojure — русскоговорящее сообщество
k0rs4r
полагаю, это можно будет в jvm ток когда релизнется Project Loom
я, конечно, видел как Loom превращает обычные локи в "необычные" =)) но думаешь оно и io сделает асинхронным?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
и принцип действия такой же, как на футурах. А вот manifold работает на netty, там другая асинхронность
источник

k

k0rs4r in Clojure — русскоговорящее сообщество
alex
я, конечно, видел как Loom превращает обычные локи в "необычные" =)) но думаешь оно и io сделает асинхронным?
он не про это, там про юзермодные легковесные треды, похожие на те что в Go
источник

k

k0rs4r in Clojure — русскоговорящее сообщество
>manifold работает на netty
мб имелось ввиду aleph ?
Сам manifold наскок помню ничего такого не имеет
источник

a

alex in Clojure — русскоговорящее сообщество
k0rs4r
он не про это, там про юзермодные легковесные треды, похожие на те что в Go
это понятно, лум в своем скоупе обычные локи превращает в неблокирующие и "паркует" этот поток. Но разве это спасет ио?
источник

a

alex in Clojure — русскоговорящее сообщество
ну и касательно работ с жсонами и парсингом - все эти go потоки как вообще влияют на кеш миссы? самые быстрые парсеры там вовсю на SIMD пишутся, а тут данные по потокам будут разные. Вот Vector API когда в джаве выйдет...
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
k0rs4r
>manifold работает на netty
мб имелось ввиду aleph ?
Сам manifold наскок помню ничего такого не имеет
manifold это подмножество стека aleph, да.
источник

a

alex in Clojure — русскоговорящее сообщество
смотрел доклады по HFT - там вообще поток лепят на ядро
источник