gpt4 book ai didi

java - 在 Spring boot 中使用两个执行器运行并行作业

转载 作者:行者123 更新时间:2023-11-30 05:24:58 25 4
gpt4 key购买 nike

我创建了一个 Spring Boot 应用程序,它将接受作业请求并在后台运行它们。这些作业请求非常密集,如果通过单线程处理,将需要 4-5 个小时。在内部,这些工作请求有单独的较小任务,约为 300-400 个。所以我创建了一个任务执行器来并行处理它们。它很有魅力,35 分钟内就完成了一切。但当另一个作业与该作业并行运行时,问题就出现了。现在,同样的工作需要 2 个小时。最初,我认为可能有一项工作正在占用所有线程并让其他工作等待。因此,为了解决这个问题,我创建了另一个执行器并将它们分配给每个作业。但没有任何改善。

顺便说一句,内部任务是内部调用数据库。

下面是任务执行器的配置以及我如何使用 on 方法。

    @Bean(name = "taskExecutor")
public Executor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(100);
executor.setMaxPoolSize(200);
executor.setQueueCapacity(200);
executor.setThreadNamePrefix("Thread1-");
executor.initialize();
return executor;
}

@Bean(name = "exTaskExecutor")
public Executor exThreadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(20);
executor.setMaxPoolSize(30);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("Thread2-");
executor.initialize();
return executor;
}

@Async("taskExecutor")
public void job1()
//do something
}

@Async("exTaskExecutor")
public void job2()
//do something
}

//database connections
spring.datasource.hikari.connectionTimeout=60000
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.maxLifetime=1800000
spring.datasource.hikari.autoCommit=true
spring.datasource.hikari.maximumPoolSize=120
spring.datasource.hikari.connection-test-query: SELECT 1 FROM DUAL

我不明白问题出在哪里?是在任务执行器中还是 HikariCP 中?我从日志中可以看到的是来自两个执行器的线程在任何时间点都没有并行运行。任何帮助或替代方式都将受到高度赞赏。

最佳答案

这里的主要问题是您拥有的可用处理器数量,您只能并行运行n个线程(n == availableProcessors)等于可用处理器数量和剩余数量将同时运行,例如您可以使用 Runtime 类检查可用处理器

Runtime.getRuntime().availableProcessors() // In my case 8

我确实拥有总共 4 核心超线程处理器,其中每个核心可以并行处理两个线程,并且铰孔线程将同时运行,you can find the difference between parallel and concurrent您还可以在这里了解更多信息 Java threads and number of cores

关于java - 在 Spring boot 中使用两个执行器运行并行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863861/

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