Java — Parallel Processing (Multi-threading)

Marco Llapapasca
3 min readNov 6, 2020

--

En la siguiente arquitectura podremos observar cómo se realiza un procesamiento en paralelo “Parallel Processing” y en la cual estamos utilizando la función de “Executer Service” de Java.

Architecture — Parallel Processing (Java — Executer Service)

Como podemos observar en la primera capa “Submitters Task” es donde inicia todos los submitters, las cuales son enviadas a la capa de “Task Queue” y finalmente estas tareas son enviadas hacia la capa “Thread Pool”, donde se realizará la ejecución en paralelo (múltiples hilos), para ello debemos tener en consideración los recursos de hardware como procesador, memoria RAM y disco duro.

Cabe aclarar que cuando tenemos este tipo de ejecuciones, el scheduler estará constantemente monitoreando los estados de las tareas “Tasks” en ejecución y las tareas pendientes; Además el total de hilos a ejecutarse dependerá de la configuración asignada o de los recursos disponibles del hardware.

En la siguiente arquitectura Multi-threading vamos a identificar el ciclo de vida de cada Thread (Hilo) y la cual podemos encontrar en la capa “Thread Pool”.

Architecture — Multi-threading (Java — Life Cycle of Thread)

New Thread: Cuando se crea un nuevo hilo, se encuentra en estado nuevo.

Runnable: Cuando el subproceso está listo para ejecutar, se encuentra en un estado ejecutable. El scheduler controla las ejecuciones de todos los hilos y gestiona las tareas pendientes o encolados.

Running: En este estado el hilo comienza a ejecutarse.

Blocked / Waiting: Cuando un hilo se encuentra temporalmente inactivo, se puede producir porque un subproceso está esperando a que complete E/S. En estos casos dependerá el Scheduler que es el encargado de monitorear y volver a reactivar el subproceso bloqueado.

Terminated: Cuando se completa o detiene la ejecución del subproceso, este hilo entra en estado terminado.

Para entender cómo funciona la ejecución de múltiples hilos en Java vamos a revisar las siguientes clases implementadas:

  1. public class Executor
  2. public class TaskExample
  3. public class Utils

1. public class Executor

Esta clase nos permite gestionar todo el ciclo de vida de los nuevos hilos como: New Thread, Runnable, Blocked / Waiting y Terminated.

Para este ejemplo vamos a ejecutar cinco procesos , de esta forma podremos validar las ejecuciones de múltiples hilos, para ello vamos a configurar los siguientes parámetros.

MAX_THREAD: Indicar el número total de hilos a ejecutar por bloque.

TASK_NUM: Capturar el correlativo del número de tasks(tareas).

PROCESS_NAME: Indicar el total de procesos a ejecutar.

2. public class TaskExample

Esta clase nos permite realizar ejecuciones de nuevas tareas en estado ejecutable (Runnable).

3. public class Utils

Esta clase nos permite capturar la fecha y hora actual del sistema con el formato “yyyy-MM-dd HH:mm:ss”

Finalmente, luego de ejecutar la clase “Executor” vamos a obtener un resultado similar.

Parallel Processing (Multi-threading)

Como podremos observar de los 6 procesos “PROCESS_NAME” configurados, solo se están ejecutando las tareas 4, 2, 1 y 3; porque previamente hemos configurado el número total de hilos a ejecutar “MAX_THREAD”.

Una vez iniciada la ejecución el scheduler empezará a monitorear el estado de cada hilo y mantendrá en cola las tareas pendientes; Una vez finalizada una tarea el scheduler enviará a ejecutar las tareas 5 y 6.

--

--

Marco Llapapasca
Marco Llapapasca

Written by Marco Llapapasca

Ingeniero de Software con amplia de experiencia en implementación de arquitecturas Bigdata on-premise, Cloud GCP / Azure / AWS / DWH y desarrollo de Software.

No responses yet