【问题标题】:Akka / futures -- does Akka decide if it's "worth" using the current thread or the dispatcher?Akka / futures - Akka 是否决定使用当前线程或调度程序是否“值得”?
【发布时间】:2011-09-16 01:07:19
【问题描述】:

我目前正在考虑使用 Akka(Java API/库)来完成创建多个 Futures 并将它们放入 BlockingQueue 的任务。现在可能是由 Callables 处理的某些任务在调用线程中运行得更快/更快,而不是创建新线程或等待新线程可用。我认为 Akka 正是这样做的,例如,如果我正在跑步:

Future<String> f1 = future(new Callable<String>() {
                  public String call() {
                      return "Hello" + "World";
                  }
              });

它可能在调用future(Callable)的当前线程中执行还是我错了?也许我错了,因为我不明白调度程序将如何决定是否创建新线程。

现在我只是使用一个使用其他线程的 ExecutorService,但由于某些任务真的非常快,它们也可以由当前线程处理。但我使用的是BlockingQueue&lt;Future&lt;Float&gt;&gt;,这就是为什么我有时不能使用Futures,有时不能。

最好的问候,
约翰内斯

【问题讨论】:

    标签: java akka future executorservice


    【解决方案1】:

    它总是使用提供的调度程序中的一个线程,或者如果没有指定,则使用全局默认值。要使用同一个线程,您需要传入一个 CallingThreadDispatcher,但它始终是同步的。除了程序员之外,根本没有任何人可以决定计算是否便宜。

    【讨论】:

    • 那么我能以某种方式在 CallingThreadDispatcher 和 ehm 之间动态选择...另一个吗?我将遍历一个树结构并计算每个节点和其他一些东西的后代或自我计数。因此,我假设在前两个或三个级别上并行进行实际计算是值得的。但在某些情况下(级别 > 2 或至少在叶节点上),如果我能以某种方式创建在当前线程中执行的期货,那就太好了。由于我不能为BlockingQueue 混合 Future 和非 Futures,所以我处于一种“两难境地”。
    • 在 Callable 中进行计算,并使用 DefaultCompletableFuture 重用计算线程并自己完成?
    • 我找不到DefaultCompletableFuture 的 Java API / Javadoc 参考资料,或者根本找不到教程:-/ 你是否知道它在“纯”Java (1.7) 中是否可行?我认为没有 ExecutorService 就不可能创建 Future,所以我可能不得不使用 Akka,无论如何我都想检查一下 ;-)
    • 阅读 ScalaDoc/Akka 中 DefaultCompletableFuture 的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多