在JVM上使用Scala IO实现的纤程技术

3

我理解的是,像cats-effects或者Zio这样的IO实现使用纤程(fiber),且在JVM上运行。

我想知道它们所使用的底层库或框架是什么,因为JVM,例如JVM 11尚未正式支持纤程?


3
首先,目前还没有内置纤程(fiber)的JVM版本。其次,据我所知(如果错误请指正),目前没有一个旨在供库使用以创建自己的低级纤程的纤程构建框架可用。第三,所有这些库都是从头开始实现自己的纤程。第四,至少对于CE3来说,他们对Loom项目不感兴趣,因为它应该不会改善(相反可能会降低)他们自己调度程序的性能;但时间会告诉我们会发生什么。 - Luis Miguel Mejía Suárez
1
@Eugene,所以我有点引用了我从CE3的作者那里听到的话,所以我并不强烈支持那个说法;此外,这就是为什么我明确说只有时间才能证明。其次,老实说,我远非CE3或项目Loom内部专家,因此我无法恰当地解释为什么会出现这种情况。但是,我的理解是,CE3已经提供了纤程和一个非常高效的调度程序,利用计算中的一些上下文信息来正确地进行调度... - Luis Miguel Mejía Suárez
@MaatDaemon 我非常确定在Java官方事务中,我发现了更多的错误和更糟糕的支持,而不是在cats-effect中。这只是我的个人看法。此外,请注意,大多数这些事情在幕后都使用标准JDK中的东西,就像最终的事情在Thread中运行一样,而像Ref这样的东西则是AtomicReference的包装器。 - Luis Miguel Mejía Suárez
哈哈,我骗到你了!但是在公司里,大老板们听到的才是可信的!不幸的是,我就在这个世界里!无论如何,我明白了。 - MaatDeamon
1
ziocats-effect都是非常高质量的项目,在Scala行业中被广泛使用。我认为它们不会比官方Java实现更容易出现“错误风险”。即使有,你也必须考虑以合理方式表达并发模式所避免的错误数量!ZIO和CE3可以帮助你做到这一点,而Java原语则不能。 - francoisr
显示剩余8条评论
1个回答

3

虚拟机(JVM)没有官方支持纤程(fibers)。但是,项目织物(Project Loom)正在开发中。

同时,像ZIO和Cats Effect这样的效果库正在维护线程池并滚动自己的线程调度实现,如Luis在问题评论中所述。

如果纤程实现仅限于特定库使您认为它们存在风险,请记住以下内容:在ZIO和Cats Effect中,纤程是低级概念。这些库的重点是在很大程度上将运行内容与确切运行方式的详细信息分离开来。它们仍然提供了灵活性,让您表达如何运行任务,但是在90%的情况下不使用此API部分。 ZIO和Cats Effect带给您的是一种用好的类型安全原语来表达并发任务的方法。这正是可以帮助您避免错误的地方。


顺便说一句,我已经被说服了。问题不是关于以类型安全的方式进行并发工作有多么有效,而是如何管理周围的人,特别是企业中的层级关系。我需要足够的信息来为这个案例辩护。举个例子,当 akka 和最终 akka stream 推出时,他们做了更多的工作来解释它们的内部工作原理,并且你有一个支持它的公司。这本质上更容易推销。 - MaatDeamon
然而,我同意你提出的所有观点和建议,它们很有帮助。我感到更加自在地解释我的选择和其他方面。 - MaatDeamon
这只是另一个愚蠢的例子,我的公司正在强制我们其中一个部门将使用SOLR开发的项目转换为ElasticSearch,仅仅因为某些原因,与技术无关。因此,最终关键在于提出一个合理的案例,这需要全面了解你所谈论的内容,这也是我提出问题的初衷。 - MaatDeamon
2
我建议您观看一些最近FP会议上的“FP销售演讲”视频,并且拿几个具体的例子来说明使用效果系统最终会使生活变得更轻松,尽管有一定的学习曲线。就像FP现在以闭包/lambda的形式出现在每种主流语言中一样,我相信您将会在未来几年看到这种趋势的普及。 - francoisr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接