Notas de capacitación sobre la estrategia del grupo de subprocesos de Dubbo en el código fuente
FixThreadPool
FixThreadPool crea subprocesos internamente a través de ThreadPoolExecutor. El número de subprocesos principales y el número máximo de subprocesos son el número de subprocesos especificados en el contexto. keepAliveTime es 0,
Cuando colas = 0, crea una cola de bloqueo SynchronousQueue;
Cuando queueslt 0, crea una cola de bloqueo ilimitada LinkedBlockingQueue
Cuando queuesgt; 0, crea una cola de bloqueo delimitada LinkedBlockingQueue.
Utilice la propia fábrica de subprocesos de Dubbo llamada NamedInternalThreadFactory para configurar el subproceso como un subproceso demonio (Demon)
La política de rechazo es AbortPolicyWithReport y la política es guardar la información de la pila durante la llamada. a un archivo local y arroja la excepción RejectedExecutionException
CachedThreadPool
La diferencia entre CachedThreadPool y FixedThreadPool es que el número de subprocesos principales y el número máximo de subprocesos no son iguales, y el la liberación de subprocesos inactivos se controla mediante
LimitedThreadPool
vivo La diferencia entre LimitedThreadPool y CachedThreadPool es que el período de tiempo de espera de los subprocesos inactivos es Long.MAX_VALUE, lo que significa que el número de subprocesos no cambia dinámicamente y los hilos creados no se liberarán.
EagerThreadPool
A diferencia de los tres grupos de subprocesos anteriores, EagerThreadPool no crea un grupo de subprocesos a través de ThreadPoolExecutor en JUC, sino que crea un grupo de subprocesos a través de EagerThreadPoolExecutor. EagerThreadPoolExecutor hereda de ThreadPoolExecutor e implementa La costumbre. El método de ejecución utiliza la cola de bloqueo TaskQueue, que hereda de LinkedBlockingQueue.
El método de ejecución primero llama al método de ejecución de ThreadPoolExecutor. Si la ejecución falla, se volverá a colocar en TaskQueue y se intentará nuevamente.
Implementar un ThreadPool personalizado
ThreadPool se define como un punto de extensión, como se muestra a continuación,
Su implementación predeterminada es FixThreadPool, que se puede implementar implementando esto extensión. Implementar estrategias de grupo de subprocesos personalizadas.