mirror of
https://gitee.com/log4j/pig.git
synced 2025-01-03 23:42:22 +08:00
✨ Introducing new features. close #I58J9Y 线程池配置默认自适配CPU
This commit is contained in:
parent
4eb805c723
commit
c67db70775
@ -0,0 +1,55 @@
|
||||
package com.pig4cloud.pig.common.core.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
/**
|
||||
* @author lengleng
|
||||
* @date 2022/5/20
|
||||
*/
|
||||
@AutoConfiguration
|
||||
public class TaskExecutorConfiguration implements AsyncConfigurer {
|
||||
|
||||
/**
|
||||
* 获取当前机器的核数, 不一定准确 请根据实际场景 CPU密集 || IO 密集
|
||||
*/
|
||||
public static final int cpuNum = Runtime.getRuntime().availableProcessors();
|
||||
|
||||
@Value("${thread.pool.corePoolSize:}")
|
||||
private Optional<Integer> corePoolSize;
|
||||
|
||||
@Value("${thread.pool.maxPoolSize:}")
|
||||
private Optional<Integer> maxPoolSize;
|
||||
|
||||
@Value("${thread.pool.queueCapacity:}")
|
||||
private Optional<Integer> queueCapacity;
|
||||
|
||||
@Value("${thread.pool.awaitTerminationSeconds:}")
|
||||
private Optional<Integer> awaitTerminationSeconds;
|
||||
|
||||
@Override
|
||||
@Bean
|
||||
public Executor getAsyncExecutor() {
|
||||
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
|
||||
// 核心线程大小 默认区 CPU 数量
|
||||
taskExecutor.setCorePoolSize(corePoolSize.orElse(cpuNum));
|
||||
// 最大线程大小 默认区 CPU * 2 数量
|
||||
taskExecutor.setMaxPoolSize(maxPoolSize.orElse(cpuNum * 2));
|
||||
// 队列最大容量
|
||||
taskExecutor.setQueueCapacity(queueCapacity.orElse(500));
|
||||
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
|
||||
taskExecutor.setAwaitTerminationSeconds(awaitTerminationSeconds.orElse(60));
|
||||
taskExecutor.setThreadNamePrefix("PIG-Thread-");
|
||||
taskExecutor.initialize();
|
||||
return taskExecutor;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user