core.async 是 Lamina 的替代品还是打算成为 Lamina 的替代品?
如果不是,是否存在明显的情况,其中一种优于另一种?
core.async 是 Lamina 的替代品还是打算成为 Lamina 的替代品?
如果不是,是否存在明显的情况,其中一种优于另一种?
我是Lamina的作者。我认为 core.async 是一个制作精良的库,其设计比 Lamina 更清晰。有些事情我认为 Lamina 更擅长,主要与内省、性能和可扩展性有关。
我对 core.async 的最大问题是,除了流抽象之外,它还带来了一个执行模型(一切都发生在 core.async 线程池上),这意味着如果你在任何地方使用它,它都会限制设计和实现代码库中的所有其他内容。
我已经看到许多将流公开为 core.async 通道的“异步”库,这意味着您只能在熟悉使用 core.async 执行模型的情况下使用这些库。
我即将发布一个库,它试图成为一个“最小”的流表示,可以用来代替 core.async、Lamina、Java 阻塞队列等,称为Manifold。可以将 Manifold 流强制转换为 core.async 通道、Lamina 通道等,并且这些内容中的任何一个都可以强制转换回 Manifold 流。
我认为“异步”领域还很年轻,还有很多未探索的问题,比如抽象的规模如何,它们在生产中调试的难易程度等等。JVM 提供了许多用于自省的工具,但由于异步机制使用完全不同的执行模型,我们基本上是从头开始重新开始。我不会告诉您在 core.async 上使用 Lamina,但我会提醒您 core.async 是应用程序级别的抽象,而不是库级别的抽象。
core.async
并且Lamina
是两个不同的项目,它们并不打算相互取代。实际上,他们可以一起玩得很好——如果你愿意的话——。
Lamina
是面向流的方法,core.async
而是面向消息的。
使用哪一个取决于您。在 Lamina 中,重要的是您为通道定义的回调,而在 core.async 中,通道和go
块是解耦的,这更加灵活和模块化。