Cuando se programa un algoritmo, se pueden ir resolviendo sus partes en serie o en paralelo.

La opción de paralelizar, en efecto aumenta el rendimiento cuando hay una etapa que tiene un elevado período de espera, ya que las otras pueden seguir avanzando.

Una de las novedades de Windows XP, era que durante el proceso de arranque se paralelizaban los procesos de comprobación y chequeo. De esta forma no había que esperar hasta que un dispositivo respondiese, o diera timeout, para ir repitiendo el proceso con los otros dispositivos.

Que la aplicación de esta idea es buena, lo demuestra el artículo que leo en Anedonia.net, informando que los desarrolladores de Linux, están trabajando para incorporar esta característica en el proceso de arranque.

Las ventajas de paralelizar procesos usando hilos de ejecución en procesadores multi-core, o con Hyperthreading, ya se comentaron en el pasado artículo titulado Hyperthreading y las aplicaciones.

A nivel general siempre que hay un recurso redundante o duplicado, es conveniente paralelizar. Sean varios dispositivos a inicializar, o varios procesadores.

En cambio, es una filosofía que a pesar de sus grandes ventajas, no suele explotarse al máximo. En concreto, es especialmente determinante el trabajo con discos.

Los discos son un dispositivo lento, y operar con ellos supone un cuello de botella casi por definición. En este caso, es donde si paralelizásemos las tareas, obtendríamos ganancias más espectaculares. Como los discos operan lentamente, las operaciones donde intervienen, duran mucho tiempo. Si lográsemos reducir el tiempo necesario en un pequeño porcentaje, el ahorro en valor absoluto, sería influyente.

Por ejemplo, los desfragmentadores de disco, no permiten reorganizar todos los discos al mismo tiempo. En mi caso primero defragmento mi disco C:, y cuando ha acabado, hago lo mismo con D:. Teniendo dos discos duros, es evidente que el proceso tardaría casi la mitad si se paralelizase.

La ejecución de CHKDSK, bajo demanda, o bien automáticamente tras un apagado incorrecto, también se ejecuta en serie. Escaneando primero un disco, y al acabar el siguiente. Lo mismo ocurre con la herramienta de comprobación de discos con interfaz GUI. De nuevo el ahorro sería de casi el 50%.

Los antivirus funcionan de esta misma manera, primero se analiza el contenido de un disco, y luego el del siguiente. En este caso, el consumo de CPU es más elevado que en las situaciones anteriores, por lo que paralelizar ahorraría un 30% o 40% del tiempo.

El defecto de diseño causado por ejecutar los procesos en serie, es especialmente palpable en aquellos casos en los que la multitarea no está disponible, y no es posible realizar ningún otro trabajo con el ordenador. Es el caso del arranque del sistema operativo, o de la comprobación de discos tras un apagado irregular.