Procesamiento paralelo con xargs
A medida que nuestra biblioteca sigue expandiéndose, queremos acelerar el procesamiento de archivos. La opción -P
de xargs
nos permite ejecutar comandos en paralelo, lo que puede mejorar significativamente el rendimiento en operaciones limitadas por E/S (I/O).
Primero, creemos un script que simule el procesamiento de un libro agregando una marca de tiempo a su contenido:
cat ~/project/process_book.sh
Deberías ver:
#!/bin/bash
echo "Processing $1 at $(date)" > ~/project/processed_$1
sleep 2 ## Simulate some processing time
Este script hace lo siguiente:
- Toma un título de libro como argumento (
$1
).
- Crea un nuevo archivo con el prefijo "processed_" antes del título del libro.
- Escribe un mensaje en este archivo, incluyendo la fecha y hora actual.
- Espera 2 segundos para simular un tiempo de procesamiento.
Ahora, usemos xargs
con la opción -P
para procesar los libros en paralelo:
cat ~/project/more_books.txt | xargs -P 3 -I {} ~/project/process_book.sh {}
Analicemos este comando:
cat ~/project/more_books.txt
: Esto lee nuestra lista de libros.
|
: Este símbolo de tubería envía la salida a xargs
.
xargs -P 3
: Esto le dice a xargs
que ejecute hasta 3 procesos en paralelo.
-I {}
: Esto define {}
como un marcador de posición para cada elemento de entrada.
~/project/process_book.sh {}
: Este es el comando a ejecutar para cada libro, con {}
reemplazado por el título del libro.
Este comando comenzará a procesar hasta 3 libros simultáneamente. Después de ejecutar el comando, puedes verificar el contenido de los archivos procesados:
cat ~/project/processed_*
Deberías ver una salida que muestre que los libros se procesaron en momentos ligeramente diferentes, lo que indica una ejecución en paralelo. Los tiempos exactos variarán, pero podrías ver algo como:
Processing Pride_and_Prejudice at Mon Aug 12 10:15:01 UTC 2024
Processing The_Catcher_in_the_Rye at Mon Aug 12 10:15:01 UTC 2024
Processing The_Hobbit at Mon Aug 12 10:15:01 UTC 2024
Processing Animal_Farm at Mon Aug 12 10:15:03 UTC 2024
Processing Brave_New_World at Mon Aug 12 10:15:03 UTC 2024
Observa cómo los primeros tres libros comienzan a procesarse al mismo tiempo, y los últimos dos comienzan aproximadamente 2 segundos después (debido al sleep 2
en nuestro script). Esto demuestra el procesamiento paralelo en acción.