gpt4 book ai didi

java - 我应该为 spring Controller 中的每个请求创建执行程序服务吗?

转载 作者:行者123 更新时间:2023-11-29 08:21:13 26 4
gpt4 key购买 nike

我正在尝试构建一个 rest API Controller ,它将主机名列表作为输入,并在每个主机名中执行一个命令

@RequestMapping("/tasks")
public Result execute(@RequestParam(value="hostList") List<HostName> hosts, String command) {
//1. Execute the command in each hostname asynchronously and get completable future.
//2. Get a list of completable future for each hostname command execution
//3. Wait for them to complete and then compose the result
}

问题是,第 1 步需要针对每个主机名异步发生。我计划为每个请求创建一个执行程序服务(线程池大小为 hosts.size()),然后在该线程池中执行步骤 1。

但我认为为每个请求创建执行器是一个坏主意,因为这会消耗大量内存。

这是正确的前进方式还是在 spring 中内置了一些东西来处理这种情况。

请注意主机列表可以从 1 到 20 不等

最佳答案

不,没有理由为每个请求创建一个新的执行器。你应该有一个执行者,当你的请求到来时,你的代码应该创建一些可运行的任务并将它们提交给执行者。同样在您的情况下,由于您正在谈论在不同主机上运行某些命令,这意味着您不在服务器上运行任何命令。您以某种方式向相关主机发送一条消息,其中包含要执行的命令。 (我假设通过队列)。因此,即使您愿意,您的命令也不能同步执行,因为每个命令都在不同的主机上执行。所以,显然它们不能运行在同一个进程中,更不用说同一个线程了。所以在你的情况下,你可能根本不需要任何 Executor 。

关于java - 我应该为 spring Controller 中的每个请求创建执行程序服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993816/

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