5

core.async 是 Lamina 的替代品还是打算成为 Lamina 的替代品?

如果不是,是否存在明显的情况,其中一种优于另一种?

4

2 回答 2

14

我是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 是应用程序级别的抽象,而不是库级别的抽象。

于 2014-11-07T17:26:27.470 回答
3

core.async并且Lamina是两个不同的项目,它们并不打算相互取代。实际上,他们可以一起玩得很好——如果你愿意的话——。
Lamina是面向流的方法,core.async而是面向消息的。

使用哪一个取决于您。在 Lamina 中,重要的是您为通道定义的回调,而在 core.async 中,通道和go块是解耦的,这更加灵活和模块化。

于 2014-11-07T12:21:07.180 回答