Subproceso virtual de Java 19: ¿debería usarlo?

Feb 16 2023
Este blog es la Parte 1 de una serie de 2 partes, que explica qué son los subprocesos virtuales en Java 19, cómo pueden los subprocesos virtuales mejorar el rendimiento de la aplicación y, finalmente, algunas evaluaciones comparativas utilizando subprocesos virtuales. ¿Qué son los subprocesos virtuales? Dado que ChatGPT es el nuevo Google, preguntémosle sobre la definición de "Subprocesos virtuales en Java19" (cada vez dio definiciones diferentes y significativas, ¡felicitaciones a los creadores de esta belleza!) Los subprocesos virtuales son un tipo de subprocesos ligeros en Java 19.

Este blog es la Parte 1 de una serie de 2 partes, que explica qué son los subprocesos virtuales en Java 19 , cómo pueden los subprocesos virtuales mejorar el rendimiento de la aplicación y, finalmente, algunas evaluaciones comparativas utilizando subprocesos virtuales.

¿Qué son los hilos virtuales?

Dado que ChatGPT es el nuevo Google , preguntémosle sobre la definición de "Subprocesos virtuales en Java19" (¡cada vez dio definiciones diferentes y significativas, felicitaciones a los creadores de esta belleza!)

Los subprocesos virtuales son un tipo de subprocesos livianos en Java 19. Los subprocesos virtuales permiten a los usuarios crear una gran cantidad de subprocesos, sin experimentar la sobrecarga asociada con los subprocesos tradicionales. Los subprocesos virtuales son administrados por la máquina virtual de Java, por lo que pueden reutilizarse según sea necesario y permiten mejoras sustanciales en el rendimiento en comparación con el uso de subprocesos nativos tradicionales.

P ara los amantes de GoLang , los hilos virtuales para ir a la rutina no son más que 'Brother from Another Mother'

Por qué son útiles los hilos virtuales

Los subprocesos virtuales de Java son diferentes de los subprocesos de la plataforma original en el sentido de que los subprocesos virtuales son mucho más livianos en términos de la cantidad de recursos (RAM) que exigen del sistema para ejecutarse . Por lo tanto, puede tener muchos más subprocesos virtuales ejecutándose en sus aplicaciones que subprocesos de plataforma. Todo el tiempo, brindándole los beneficios completos de un hilo de plataforma normal.

Uso de subprocesos virtuales

Crear un subproceso virtual en Java es similar a crear un subproceso Runnable convencional. Sin embargo, usaremos la clase Executors para crear newVirtualThreadPerTaskExecutor (), que inicia un nuevo subproceso virtual para cada tarea. El número de hilos creados por el Ejecutor es ilimitado.

Prueba

En esta prueba, llamaré a un servicio externo (que tarda 1 milisegundo en responder) y realizaré la operación 1 millón de veces utilizando tanto la plataforma convencional como los subprocesos virtuales.

Objetivo:
Comparar el tiempo que tardan los subprocesos virtuales frente a los subprocesos convencionales para completar la operación 1 millón de veces.
Especificaciones de la máquina: 10 núcleos, 16 GB de memoria.

Código:

Hilos convencionales

Solo podía usar un máximo de hasta 1000 subprocesos, más y recibía un error OOM.

Subprocesos virtuales

Resultados :

A continuación se muestra el uso de la CPU + el tiempo que tardan ambos enfoques en ejecutar el bucle for externo 10 veces.

Hilos convencionales

Ampliar para ver

Hilos virtuales

Ampliar para ver

Conclusión :

La diferencia horaria entre el uso de subprocesos convencionales y virtuales nos da un claro ganador para usar subprocesos virtuales en caso de que estemos esperando algún servicio externo. Si extrapolamos este ejemplo a 10 millones o 100 millones de llamadas, la diferencia se vuelve significativamente mayor y los subprocesos virtuales emergen como los de mejor rendimiento cuando la aplicación está involucrada en la espera de alguna aplicación externa.

El ejemplo imitaba la llamada de un servicio externo mediante Thread.sleep(), que se puede reemplazar con una llamada real a un servicio externo. Esto se deja como ejercicio para el lector. ¡¡¡HAZLO!!!

NOTA: Es cierto que por prueba y error, podemos optimizar el número de creación de subprocesos convencionales, aunque no será posible predecir el número perfecto de subprocesos para cada caso de uso (si mantiene aleatoriamente un grupo con subprocesos más altos). , está desperdiciando innecesariamente los recursos de la aplicación). El uso de una asignación dinámica de subprocesos (subprocesos virtuales) tiene mucho más sentido en una aplicación del mundo real.

Problemas con el uso de subprocesos virtuales

El ejemplo anterior le hizo darse cuenta de que el subproceso virtual es lo mejor, y para acelerar sus aplicaciones y para una utilización óptima de su CPU, siempre debemos crear subprocesos virtuales.

Ojalá todo no viniera con un “ PERO ”.

Los subprocesos virtuales en Java son excelentes, pero en caso de que su aplicación no esté vinculada a E/S, es decir, si la propia CPU necesita realizar un procesamiento pesado (como entrenar un modelo o contar hasta 100 millones), el uso de subprocesos virtuales no es la elección ideal.

Los detalles de esto se darán en la segunda parte de este artículo. ¡¡¡Manténganse al tanto!!!

Pensamientos finales

La introducción de Java 19 a los sistemas aún está en fase de desarrollo (ya que el proyecto Loom está solo en la fase de vista previa por ahora), aunque esperamos ver grandes mejoras en la administración del servidor, tiempos de respuesta de API más rápidos y problemas de OOM menos frecuentes.

Sobre el Autor :

Yash Bansal es Ingeniero Principal Asociado en RedBus. Puedes encontrar más información sobre él en su perfil de LinkedIn .