El procesamiento en paralelo en Bash se refiere a la ejecución simultánea de múltiples tareas o comandos en un script de Bash. Esto permite aprovechar al máximo los recursos disponibles en un sistema y puede acelerar considerablemente la ejecución de un programa o script.
Hay varias formas de lograr el procesamiento en paralelo en Bash. Una de las formas más comunes es utilizando subprocesos en segundo plano (background processes) y el comando wait para esperar a que todos los subprocesos terminen antes de continuar con el script principal.
Aquí hay un ejemplo simple que muestra cómo ejecutar múltiples comandos en paralelo usando subprocesos en segundo plano,
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash # Comando 1 en segundo plano comando1 & pid1=$! # Comando 2 en segundo plano comando2 & pid2=$! # Esperar a que los subprocesos terminen wait $pid1 wait $pid2 # Continuar con el script principal echo "Todos los subprocesos han terminado." |
Es importante tener en cuenta que el número de subprocesos en paralelo que se pueden ejecutar al mismo tiempo puede estar limitado por el sistema operativo y los recursos disponibles en el sistema. Además, el procesamiento en paralelo puede introducir complejidad adicional debido a posibles problemas de concurrencia, como la competencia por recursos compartidos. Por lo tanto, es importante diseñar y probar cuidadosamente el uso de procesamiento en paralelo en un script de Bash.
Un ejemplo
Supongamos que tienes una lista de URLs de sitios web y deseas extraer el título de cada página para realizar un análisis posterior. En lugar de procesar cada URL secuencialmente, puedes aprovechar el procesamiento en paralelo para acelerar el proceso. Aquí hay un ejemplo de cómo podrías hacerlo,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/bash # Lista de URLs urls=( "https://www.ejemplo1.com" "https://www.ejemplo2.com" "https://www.ejemplo3.com" # Añadir más URLs según sea necesario ) # Función para extraer el título de una página web extract_title() { url="$1" title=$(curl -s "$url" | grep -o "<title>.*</title>" | sed -e 's/<[^>]*>//g') echo "Título de $url: $title" } # Recorrer la lista de URLs y ejecutar la función extract_title en segundo plano para cada una for url in "${urls[@]}"; do extract_title "$url" & done # Esperar a que todos los subprocesos terminen wait echo "Proceso de extracción de títulos completado." |