gpt4 book ai didi

multithreading - Play Framework : thread-pool-executor vs fork-join-executor

转载 作者:行者123 更新时间:2023-12-01 10:47:56 24 4
gpt4 key购买 nike

假设我们的 Controller 中有一个 Action 。在每次请求时,许多用户都会调用 performLogin。

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-executor 的作用。基本上从接收请求的主线程开始,它跨越多个工作线程,这些工作线程将工作分成几个 block 。最终主线程将加入这些结果并从函数返回。

另一方面,如果我选择thread-pool-executor,我的理解是从线程池中选择一个线程,这个被选中的线程会完成工作,然后回到线程池中监听更多的工作要做。所以这里没有任务的分割。

在我看来,在上面的代码中,fork-join 执行器的并行性是不可能的。对不同方法/函数的每次调用都需要来自上一步的内容。如果我为线程选择 fork-join 执行器,那对我有什么好处? fork-join 与线程池执行器之间的上述代码执行有何不同。

谢谢

最佳答案

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

执行器负责安排来自 Akka actor 和大多数 Future 的工作(不是那些使用 Future.successfulFuture.failed 创建的)。在这种情况下,每个请求都将是一个单独的任务,执行者必须将其安排到一个线程上。

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

关于multithreading - Play Framework : thread-pool-executor vs fork-join-executor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23697550/

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