ES线程池详解)
前言:
ES的操作中充斥着不同的操作任务类型,如Index、Search、刷新合并、recover等等。各种类型任务之间不但有着不同的实效性的要求(如有的任务要求尽快完成,而另外一些类型任务可能不要求),而且CPU资源消耗也可能因为应用场景不同而有区别(如ELK是一种写多的应用场景,而站内搜索可能是写少读多的应用场景)。
在Java线程池框架的基础上,ES扩展设计了自己的线程池方案。首先,ES中线程池的类结构如图:
基于这种结构,ES定义了若干种类型的线程池,下面分开一一介绍。
Java自带线程池回顾
默认线程池
默认基于ThreadPoolExecutor的线程创建方法(阿里规范必须这样构建):
private static ExecutorService executorService = new ThreadPoolExecutor(coreProcessorsNum, coreProcessorsNum * 2, 5, TimeUnit.MINUTES,
new ArrayBlockingQueue<>(100), new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(new SecurityManager().getThreadGroup