Является ли core.async заменой Lamina или намерен стать заменой Lamina?Clojure core.async и Lamina
Если нет, существуют ли четкие ситуации, когда предпочтительнее другого?
Является ли core.async заменой Lamina или намерен стать заменой Lamina?Clojure core.async и Lamina
Если нет, существуют ли четкие ситуации, когда предпочтительнее другого?
Я являюсь автором Lamina. Я думаю, что core.async - это хорошо сделанная библиотека, с большей четкостью в дизайне, чем Lamina. Есть вещи, которые, на мой взгляд, лучше Ламина, в основном связанные с интроспекцией, эффективностью и расширяемостью.
Большая проблема, с которой я столкнулся с core.async заключается в том, что в дополнение к абстракции потока она реализует модель исполнения (все происходит в пулах потоков core.async), а это означает, что если вы ее используете в любом месте, сдерживает разработку и реализацию всего остального в вашей кодовой базе.
Я видел несколько «асинхронных» библиотек, которые отображали потоки как каналы core.async, а это значит, что вы можете использовать библиотеки только в том случае, если вам удобно использовать модель выполнения core.async.
Я собираюсь выпустить библиотеку, которая пытается быть «минимальным» представлением потока, которое может быть использовано вместо core.async, Lamina, очереди блокировки Java и т. Д. Под названием Manifold. Поток манифольда может быть принудительно подключен к каналу core.async, каналу Lamina и т. Д., И любая из этих вещей может быть принудительно возвращена в поток Manifold.
Я думаю, что «асинхронный» пейзаж все еще довольно молодой, и есть много неисследованных проблем w.r.t. насколько хорошо масштабируются абстракции, насколько легко они отлаживаются в производстве и т. д. JVM предоставляет множество инструментов для интроспекции, но поскольку механизмы асинхронного использования используют совершенно другую модель исполнения, мы в основном начинаем снова с нуля. Я бы не сказал вам использовать Lamina над core.async, но я бы предостерег, что core.async - это абстракция уровня приложения, а не уровень библиотеки.
Большое спасибо за это, всегда лучше услышать от авторов. Я не понимал, что о core.async и хорошей вещи, чтобы рассмотреть. Я прочитаю логический документ для Manifold, но сейчас немного поздно в пятницу. – shmish111
Многообразие выглядит неплохо, конечно, но мне все же нужно сделать выбор за ним. Кажется, что Lamina и core.async, вероятно, будут оставаться как разные стратегии для достижения одной и той же конечной цели. Я думаю, что я буду играть больше с Lamina, поскольку он уже находится в нашей базе кода, однако core.async позволил мне просто обернуть что-то в блоке go и увидеть массовое увеличение производительности, не изменяя способ, которым я думаю об этом фрагменте код. – shmish111
Теперь я вижу, что Ламина устарела.Я использую Manifold на данный момент для клиента Kafka, кажется, идеально подходит, потому что я могу создать простую библиотеку, которая возвращает поток, и люди могут использовать его, как им нравится, как канал, seq, поток коллектора и т. Д. (при условии, что это работает :))! – shmish111
core.async
и Lamina
- это два разных проекта, и они не предназначены для замены друг друга. Собственно, они могли бы сыграть красиво вместе, если хочешь.
Lamina
- ориентированный на поток подход, а core.async
- сообщение предназначенный.
Какой из них вам нужен. В Lamina важны обратные вызовы, которые вы определяете для канала, а в core.async, каналы и go
блоки развязаны, и это более гибкое и модульное.
Итак, я бы предположил, что создатели core.async подумают, что это лучший способ сделать что-то, чем Ламина, нет? – shmish111
@ shmish111 Я не знаю, лучше спросить их :) Учитывая мой ответ, я не имел в виду core.async лучше, чем Lamina – Chiron
Я сказал, что, как я только что смотрел рассказ Rich Hickey о core.async;) – shmish111
Многие разновидности параллелизма в Clojure могут быть интересными - http://adambard.com/blog/clojure-concurrency-smorgasbord/ – edbond
Я видел это, и хотя это была отличная статья, это было слишком «хорошо», чтобы ответить на мой вопрос, я думаю. – shmish111