El número de ThreadPoolExecutor

preámbulo

Resuelva la base sobre cómo establecer la cantidad de subprocesos en el grupo de subprocesos de Java

Hombros gigantes:

  1. https://blog.csdn.net/weilaizhixing007/article/details/125955693

  1. https://blog.csdn.net/yuyan_jia/article/details/120298564#:~:text=%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E6% B1%A0%E5%A4%84%E7%90%86%E8%AE%A1,N%3D16%E4%B8%AA%E7%BA%BF%E7%A8%8B%E3%80%82

Comenzar

Según la descripción anterior, podemos entender que la configuración del número de grupos de subprocesos debe clasificarse según el tipo de operación comercial. Existen diferencias en las reglas para establecer el número de subprocesos en diferentes tipos de grupos de subprocesos. También muestra que los grupos de subprocesos para diferentes empresas deben crearse por separado en lugar de Un grupo de subprocesos se aplica a todos los tipos de tareas informáticas [email protected]

Entonces, la clasificación del grupo de subprocesos:

  • Computacionalmente intensiva

  • E/S intensivo

  • Informática y E/S híbrida

Computacionalmente intensiva

El número óptimo de CPU es: número de núcleos+1

Este tipo de tarea consume principalmente recursos de CPU, y la cantidad de subprocesos se puede establecer en N (cantidad de núcleos de CPU) + 1. Un subproceso más que la cantidad de núcleos de CPU es para evitar la interrupción ocasional de subprocesos por fallas de página o tareas causadas por otras razones El impacto de la suspensión. Una vez que se suspende la tarea, la CPU está inactiva y, en este caso, un subproceso adicional puede aprovechar al máximo el tiempo de inactividad de la CPU. ---El propósito de un subproceso más es resolver la interrupción repentina del subproceso y la CPU no se utiliza por completo

Cuando la cantidad de subprocesos es demasiado pequeña, una gran cantidad de solicitudes se bloquearán en la cola de subprocesos esperando la ejecución del subproceso al mismo tiempo, y la CPU no se utiliza por completo en este momento; cuando la cantidad de subprocesos es demasiado grande , los subprocesos de ejecución creados luchan por los recursos de la CPU al mismo tiempo, lo que provocará que una gran cantidad de cambios de contexto aumenten el tiempo de ejecución de los subprocesos y afecten la eficiencia general de la ejecución.

Tipo denso de E/S

El número óptimo de CPU es:

如上的算法是知道cpu利用率的情况下的算法,如下的算法是在不知道的情况下默认设置的一个算法

系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程, 具体的计算方法是 2N。

混合型

在一个任务既有I/O密集型又有计算密集型的计算任务时,且不能分开,则线程池的参数设置.

计算操作需要5ms,DB操作需要100ms,对于一台8个CPU的服务器,怎么设置线程数呢

最优线程数 = N(CPU 核数)*(1/(UT(线程CUP利用时间)/AT(线程总时间)))

如上 wt/st就是 5/105 表示,处理此类类型的业务单个线程的CPU利用率.

1 /(UT(线程CUP利用时间)/AT(线程总时间)) : 表示 让一个内核所有时间都有事情做,需要多少个线程,这个是最多多少个线程,因为线程不是刚好就衔接CPU的占用,肯定有CPU的抢夺,还有线程的阻塞

N(CPU 核数)*(1/(UT(线程CUP利用时间)/AT(线程总时间))) 最后乘以N则标识充分利用N个内核的CUP时间需要的线程数

我们可以通过jvisualvm.exe来获取线程CPU的占有时间,如下图所示:

Supongo que te gusta

Origin blog.csdn.net/cuiyaonan2000/article/details/129009449
Recomendado
Clasificación