Page cover

Multithreads en Bash Scripting

Explicación de aplicación de multithreads en Bash Scripting.


Testing para analizar el concepto de multihilos desde scripting en Bash. Se utilizan herramientas de sistemas Linux como parallel o xargs para replicar el multithreading implementado de forma nativa mediante librerías en lenguajes de programación como Go, Pyhton o C++.

Se destaca que existen formas más complejas de realizar estas tareas mediante fork o exec, los cuales no descarto implementarlos para testing en post futuro.

No confundir el multithreading en Bash Scripting con el coprocesado. Un coproceso ofrece control sobre la ejecución de procesos en segundo plano y la gestión de sus entradas y salidas. En este caso, la similitud al multithreading implementado aplica un enfoque distinto, aprovechando las capacidades de ejecución paralela de procesos por xargs o parallel.


¿Qué son los multihilos?

La implementación de multihilos o el multithreading en un lenguaje de programación refiere a la capacidad de un programa para ejecutar múltiples hilos de ejecución de manera concurrente. Un hilo es la unidad más pequeña de procesamiento que puede programar un sistema operativo. A esto se asocian los siguientes conceptos:

  • 1. Hilos (Threads): Secuencia de instrucciones que puede ser ejecutada por la CPU de manera independiente. Los hilos dentro de un mismo proceso comparten el mismo espacio de direcciones, lo que significa que pueden acceder a las mismas variables y recursos del proceso.

  • 2. Procesos: Un proceso es un programa en ejecución que tiene su propio espacio de direcciones. Un proceso puede ser contenido por múltiples hilos.


Beneficios generales del multithreading

  • 1. Paralelismo: En sistemas con múltiples CPUs o núcleos, los hilos pueden ser ejecutados en paralelo, mejorando el rendimiento y reduciendo el tiempo de ejecución de una tarea o proceso.

  • 2. Concurrencia: Incluso para sistemas operativos que trabajen con una sola CPU, el uso de hilos puede generar que un programa sea mucho más eficiente, al permitir que diferentes segmentos de este se ejecuten de manera concurrente. Por ejemplo, un hilo puede gestionar la interfaz de usuario mientras otro realiza operaciones de entrada/salida sobre la misma aplicación.

  • 3. Responsividad: En aplicaciones interactivas con GUI, el multithreading permite que esta mantenga la respuesta estándar a las entradas del usuario mientras realiza tareas de en segundo plano.


Consideraciones a tener con el multithreading

  • 1. Sincronización: Cuando múltiples hilos acceden y modifican uno o varios recursos compartidos, se deben usar mecanismos de sincronización (como mutexes, bloqueos u otros) para evitar condiciones de carrera y garantizar la coherencia de los datos manipulados durante la ejecución del proceso.

  • 2. Deadlocks: Situación que se presenta cuando dos o más hilos se bloquean por un tiempo indefinido, debido a la espera de recursos a procesar que otros hilos retenienen.

  • 3. Sobrecarga de contexto: Acción de cambiar de un hilo a otro (context switching) que introduce una sobrecarga adicional sobre un hilo específico, pudiendo a corto o largo plazo afectar el rendimiento en la ejecución del proceso si se maneja un número de threads muy elevado.

  • 4. Debugging: En caso de presentarse errores asociados a la ejecución de un proceso utilizando un número de threads muy elveado, la gestión de errores pueden ser difícil de reproducir y depurar debido a la naturaleza concurrente de la ejecución.


Ejemplos de la implementación de multithreads en otros lenguajes

  • Go

  • C/C++

  • Python

  • Java