perf: 调整线程池参数和作用域.

调整线程池为静态, 以为所有 Trigger 实例提供, 消除线程池重复创建导致的线程过剩情况, 将线程数设为核心数量.
This commit is contained in:
LamGC 2021-08-15 13:56:44 +08:00
parent da86b0f9bc
commit 33967c675b
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D
2 changed files with 14 additions and 5 deletions

View File

@ -1,6 +1,8 @@
package net.lamgc.oracle.sentry.script.groovy.trigger;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -12,13 +14,16 @@ import java.util.concurrent.Executors;
@TriggerName("once")
public class OnceTrigger implements GroovyTrigger {
private final static ExecutorService executor = Executors.newFixedThreadPool(4,
private final static Logger log = LoggerFactory.getLogger(OnceTrigger.class);
private final static ExecutorService EXECUTOR = Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors(),
new ThreadFactoryBuilder()
.setNameFormat("GroovyOnceExec-%d")
.setUncaughtExceptionHandler((t, e) -> log.error("脚本执行时发生未捕获异常.", e))
.build());
@Override
public void run(Runnable task) {
executor.execute(task);
EXECUTOR.execute(task);
}
}

View File

@ -3,20 +3,24 @@ package net.lamgc.oracle.sentry.script.groovy.trigger;
import com.google.common.base.Throwables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
/**
* @author LamGC
*/
@SuppressWarnings("unused")
@TriggerName("timer")
public class TimerTrigger implements GroovyTrigger {
private final static Logger log = LoggerFactory.getLogger(TimerTrigger.class);
private CronTrigger trigger;
private final TaskScheduler scheduler = new ThreadPoolTaskScheduler();
private final static ThreadPoolTaskScheduler SCHEDULER = new ThreadPoolTaskScheduler();
static {
SCHEDULER.setPoolSize(Runtime.getRuntime().availableProcessors());
SCHEDULER.setErrorHandler(t -> log.error("脚本执行时发生异常.", t));
}
/**
* 设定定时时间.
@ -49,7 +53,7 @@ public class TimerTrigger implements GroovyTrigger {
return;
}
scheduler.schedule(runnable, trigger);
SCHEDULER.schedule(runnable, trigger);
}
}