gpt4 book ai didi

使用 Akka 进行 Scala 折叠

转载 作者:行者123 更新时间:2023-12-05 00:02:57 26 4
gpt4 key购买 nike

我用 Java 实现了我所谓的“可折叠队列”,即 ExecutorService 使用的 LinkedBlockingQueue。这个想法是,每个任务作为一个唯一的 id,如果在队列中,而另一个任务通过相同的 id 提交,则不会将其添加到队列中。 Java 代码如下所示:

public final class FoldablePricingQueue extends LinkedBlockingQueue<Runnable> {
@Override
public boolean offer(final Runnable runnable) {
if (contains(runnable)) {
return true; // rejected, but true not to throw an exception
} else {
return super.offer(runnable);
}
}
}

线程必须预先启动,但这是一个小细节。我有一个抽象类,它实现了带有唯一 ID 的 Runnable ......这是传入的一个

我想使用 Scala 和 Akka(Actors)来实现相同的逻辑。
我需要访问邮箱,我想我需要覆盖 !方法并检查事件的邮箱..以前有人这样做过吗?

最佳答案

这正是 Akka 邮箱的工作原理。 Akka 邮箱在任务队列中只能存在一次。

看着:

https://github.com/jboner/akka/blob/master/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala#L143

https://github.com/jboner/akka/blob/master/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala#L198

使用原子 bool 值非常便宜地实现,因此无需遍历队列。

此外,顺便说一下,您的 Java 队列已损坏,因为它没有覆盖放置、添加或提供(E,long,TimeUnit)。

关于使用 Akka 进行 Scala 折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com