El número de hilos, el número de disparar más cómodo?

Creo que hemos utilizado el grupo de subprocesos, pero la piscina se ajusta al número de hilos mucho más razonables que?

El propósito principal de establecer el número de hilos con el fin de utilizar plenamente y racional de los recursos de CPU y memoria, maximizando así el rendimiento, así que vamos a ir explorarlo!

En primer lugar, tener en cuenta el número de núcleos de CPU, a continuación, cómo obtener un número de la base de hilos en Java?

Puede utilizarse Runtime.getRuntime().availableProcessor()un método para obtener (puede no ser exacta, como una referencia)

Después de confirmar el número de núcleos, el juicio es ir tareas intensivas de la CPU o tareas IO-intensivos:

  • tareas intensivas de la CPU: como el cifrado, la compresión, y una serie requiere una gran cantidad de tareas de computación consumen recursos de la CPU, la mayoría de las escenas son la computación de la CPU pura .
  • IO-tareas intensivas, tales como: la base de datos MySQL, lectura y escritura de archivos, la red de comunicaciones y otras tareas, estas tareas no serán particularmente consumen recursos de la CPU, pero la operación IO lleva mucho tiempo, tomará más tiempo .

Saber cómo determinar las categorías de tareas, vamos a discutir dos escenarios:

tareas intensivas de la CPU

Para computación intensivo de la CPU, la naturaleza multi-roscado es para mejorar la utilización de la CPU de varios núcleos, por lo que para una CPU de 8 núcleos, un hilo de núcleo cada una, en teoría, crear ocho hilos en él.

Si hay demasiados hilos, en realidad no jugar muy buenos resultados. En este momento, supongamos que establecer el número de hilos es de 2 veces el número de núcleos de CPU, ya que las tareas de computación muy pesados, que tendrá una gran cantidad de recursos de CPU, así que cuando cada CPU núcleo de trabajo son, básicamente, a plena capacidad, y hemos establecido demasiadas hebras, cada hilo quieren utilizar recursos de la CPU para realizar sus tareas, lo que provocaría el cambio de contexto innecesaria, esta vez aumentando el número de hilos y no dejar que el rendimiento, pero debido a la cantidad de hilos puede causar excesiva degradación del rendimiento.

Por lo tanto, para los escenarios de computación intensivo de la CPU, teóricamente el número de hilos = número núcleo de la CPU es la más adecuada, pero por lo general el número de hilos se establece en el número de 1 núcleo de la CPU , se lograr una utilización óptima. Incluso cuando intensiva hilo página de memoria debido a la falta ocasional o por otras causas en caso de bloqueo, los hilos adicionales pueden asegurar los ciclos de CPU no se desperdician, a fin de garantizar la utilización de la CPU.

A continuación la figura 8 es una CPU de núcleo en el ordenador, para probar el efecto en las tareas intensivo de la CPU (cálculo número primo) rendimiento mediante la modificación del número de hilos.

Puede verse que cuando el número de hilos de menos de 8, el rendimiento es pobre, el número de hilos que el número de núcleos de procesador para mejorar el rendimiento es pequeño, es posible verificar la aplicabilidad de una determinada fórmula o.

Además, también es posible que desee considerar lo que otros consumen al mismo tiempo los recursos de CPU excesivos que el programa se está ejecutando en la misma máquina, y luego hacer todo el equilibrio del uso de recursos.

tareas IO-intensivos

El número máximo de subprocesos para tareas-IO intensiva típicamente muchas veces mayor que el número de núcleos de CPU, ya que en términos de velocidad IO leídos y velocidades de escritura en comparación con la CPU es relativamente lento, si nos fijamos el número de hilos es demasiado pequeño, puede hacer que los recursos de la CPU los residuos. Y si hemos creado unos cuantos hilos, a continuación, cuando una parte de la rosca está esperando IO, y que no es necesario en este momento para el cálculo de la CPU, para que puedan utilizar otra CPU hilo para realizar otras tareas, independientemente unos de otros, por lo esperando en las tareas de cola de trabajos será reducida, un mejor uso de los recursos.

Para IO escenarios de computación intensiva, el número óptimo de hilos es mucho tiempo y CPU de computación y las operaciones del programa IO relacionados con la siguiente relación, autor "Java concurrencia en combate," el cerebro Goetz recomendado métodos de cálculo:

线程数 = CPU 核心数 * (1 + IO 耗时/ CPU 耗时)

Por esta fórmula, podemos calcular un número razonable de hilos, si el tiempo medio de espera es tarea larga, aumenta el número de hilos, y si las medias largas horas de trabajo, lo cual es por encima de nuestras tareas intensivas de la CPU en el número de hilos reducida. Los métodos estadísticos que han de emplearse para cada herramienta que consume tiempo APM, y para facilitar el cálculo IO consume tiempo de CPU que consume.

Toda la concurrencia de Java en la figura combate, para facilitar más fácil de entender:

Tres hilo de ejecución esquemático

Hay una escuela de calculado "Java Virtual Machine programación concurrente" propuesto:

线程数 = CPU 核心数 / (1 - 阻塞系数)

Donde el factor de bloqueo es computacionalmente intensivas 0, IO intensiva factor de bloque cerca de 1, generalmente se considera que entre 0,8 y 0,9. Por ejemplo la CPU de 8 núcleos, de acuerdo con la fórmula es 2 / Resultados (1 - 0,9) = el número de hilos 20

La figura es una prueba IO tareas intensivas, un número diferente de hilos está abierto en un procesador de doble núcleo (de 140) para poner a prueba el efecto sobre el rendimiento del programa, el número de hilos se puede ver después de la piscina alcanzó 20, la curva de nivel gradualmente, ninguna cantidad de programa de mejora del rendimiento hilo abierto explicación no ha ayudado.

El número de hilos muy poco hará que la degradación del rendimiento general del programa, mientras que demasiados hilos consumirán otros recursos como la memoria, así que si quieres una manera más precisa, se puede medir la presión, así como el seguimiento de la rosca de la carga de la CPU JVM, según medida real del número de hilos debe ser creado, el uso racional y lleno de recursos.

Al mismo tiempo, hay una gran cantidad de grupo de subprocesos de aplicaciones, tales como Tomcat, Redis, JDBC, etc., el número de hilos por parámetros de la aplicación son diferentes, tales como Tomcat flujo de entrada, establecer el número de hilos puede tener que ser mayor que otras aplicaciones.

resumen

Al explorar el número de hilos en el conjunto, podemos ver que establecer el número de hilos y núcleos de CPU Primera de gran relevancia, además, tenemos que seleccionar la estrategia correspondiente en función del tipo de tarea, el tiempo medio de trabajo para un hilo de la proporción cuanto mayor sea, menos se necesita para enhebrar; cuanto mayor sea el hilo de la proporción del tiempo medio de espera, necesitamos más hilos; para diferentes programas, correspondiente a la prueba real se puede obtener la opción más apropiada.

referencia

"Java concurrencia en el combate."

"Java Virtual Machine programación concurrente."

combate de Java concurrencia

núcleo de Java concurrencia

Supongo que te gusta

Origin www.cnblogs.com/wupeixuan/p/12563640.html
Recomendado
Clasificación