当前位置: 首页 > 知识库问答 >
问题:

Play框架:thread-pool-executor与fork-join-executor

郎琪
2023-03-14
def performLogin( ) = {
    Async {
        // API call to the datasource1
        val id = databaseService1.getIdForUser();

        // API call to another data source different from above
        // This process depends on id returned by the call above
        val user = databaseService2.getUserGivenId(id);

        // Very CPU intensive task 
        val token = performProcess(user)

        // Very CPU intensive calculations
        val hash = encrypt(user)

        Future.successful(hash)
    }
}

在上面,我认为fork-join执行器的代码并行是不可能的。对不同方法/函数的每次调用都需要上一步的内容。如果我要为线程选择fork-join执行器,这对我有什么好处呢?在fork-join和线程池执行器之间,上面的代码执行会有什么不同。

谢谢

共有1个答案

乜胜泫
2023-03-14

这不是并行代码,您的async调用中的所有内容都将在一个线程中运行。其实,玩吧!从不产生新的线程来响应请求--它是基于事件的,有一个底层线程池来处理需要完成的任何工作。

executor处理来自Akka执行器和大多数期货(不是使用future.successedfuture.failed创建的期货)的工作调度。在这种情况下,每个请求都是一个单独的任务,执行程序必须将其调度到线程上。

fork-join-executor取代了thread-pool-executor,因为它允许工作窃取,从而提高了效率。两个执行器可以并行化的内容没有区别。

 类似资料:
  • fork-join框架允许在几个worker上中断某个任务,然后等待结果将它们组合起来。 它在很大程度上利用了多处理器机器的容量。 以下是fork-join框架中使用的核心概念和对象。 Fork Fork是一个过程,在这个过程中,任务将自身分成较小且独立的子任务,这些子任务可以同时执行。 语法 (Syntax) Sum left = new Sum(array, low, mid); left.

  • 本文向大家介绍Java Fork/Join框架,包括了Java Fork/Join框架的使用技巧和注意事项,需要的朋友参考一下 Fork/Join框架是ExecutorService接口的一个实现,通过它我们可以实现多进程。Fork/Join可以用来将一个大任务递归的拆分为多个小任务,目标是充分利用所有的资源尽可能增强应用的性能。 和任何ExecutorService接口的实现一样,Fork/Jo

  • 主要内容:Fork,Join,ForkJoinPool,RecursiveAction,递归任务,实例框架允许在几个工作进程中断某个任务,然后等待结果组合它们。 它在很大程度上利用了多处理器机器的生产能力。 以下是框架中使用的核心概念和对象。 Fork Fork是一个进程,其中任务将其分成可以并发执行的较小且独立的子任务。 语法 这里是的子类,方法将任务分解为子任务。 Join 连接()是子任务完成执行后任务加入子任务的所有结果的过程,否则它会持续等待。 语法 这里剩下的是类的一个对象。 For

  • 在Doug Lea的论文“A Java Fork/Join Framework”中: http://gee.cs.oswego.edu/dl/papers/fj.pdf 在2.1偷工中,他说: 当工作线程遇到连接操作时,它会处理其他任务(如果可用),直到注意到目标任务已完成(通过isDone)。否则,所有任务都将在不阻塞的情况下运行到完成。 那么有人能具体告诉我这些“其他任务”来自哪里吗?它们来自

  • ForkJoinTask明确指出“可细分任务也不应执行阻塞输入/输出”。它的主要目标是“计算纯函数或在纯孤立对象上操作的计算任务”。我的问题是:- 为什么设计ForkJoinTask来限制阻塞IO任务 在我的场景中,单个请求执行两种类型的工作,其中一种是加密,它将CPU核心在200毫秒内推到100%,第二种是很少的数据库调用。任何类型的静态分区,例如用于加密的6个线程和用于阻塞IO的2个线程,都不

  • 问题内容: 使用新的fork / join框架 有什么好处,而不是仅在开始时将大任务简单地拆分为N个子任务,然后将它们发送到缓存的线程池(来自Executors),然后等待每个任务完成?我看不到使用fork / join抽象如何简化问题或使解决方案比我们多年以来的效率更高。 例如,本教程示例中的并行化模糊算法可以这样实现: 首先拆分,然后将任务发送到线程池: 任务进入线程池的队列,当工作线程可用时