Qué es la programación multihilo y qué ventajas tiene

Qué es la programación multihilo y qué ventajas tiene

Carlos Yañez

21-02-2018

Desde hace ya bastantes años, los sistemas operativos son multitarea, lo que les permite ejecutar diversos procesos de forma simultánea. Esta capacidad ha permitido el hecho de optimizar la programación hacia modelos multiproceso o multihilo.

En el post de hoy explicaremos en que consiste la programación multihilo, así como cuándo puede representar una ventaja respecto a la programación tradicional o secuencial.

¿Qué es la programación multihilo?

Para poder explicar claramente lo que es la programación multihilo, lo primero es necesario aclarar una serie de conceptos para entender la diferencia entre multiproceso y multihilo.

Los sistemas operativos multitarea ejecutan o emulan ejecutar más de una tarea a la vez. Esto es solo cierto si dispone de más de un procesador, si no, va alternando procesos en un solo procesador.

La ejecución de un proceso implica que el mismo en el momento de ejecución utiliza todo el procesador y con el espacio de memoria asignado. En sistemas multitarea, se van alternando procesos y cuando uno libera el procesador para que otro se ejecute, también libera la memoria asignada.

Esto lo realiza el planificador del sistema operativo lo cual implica la correcta gestión de la memoria para guardar los datos del proceso saliente, provocando cierta sobrecarga del sistema.

La programación multihilo se basa en que, dentro del desarrollo de la aplicación, hemos definido diversas tareas para que se ejecuten a la vez. Todas estas tareas forman parte de un mismo proceso.

Para nuestro sistema operativo tendremos un solo proceso con diversas tareas a ejecutar. En este sentido el planificador se encarga de que cuando le toque ejecutarse a nuestro proceso, las tareas del mismo se vayan alternando, con la diferencia que, al ser de un mismo proceso, no se libera espacio de memoria ni procesador, como si se haría en el caso de alternar procesos.

Esto agiliza por lo tanto la ejecución de nuestro proceso que además puede simular paralelizar la ejecución de varias tareas a la vez.

Para realizar una programación multihilo, deberemos indicar en el código de programación mediante el comando correspondiente que queremos lanzar diversas tareas en diferentes hilos.

¿Cuándo vale la pena usar la programación multihilo?

El hecho de usar programación multihilo no implica que siempre vamos a tener una mejora de rendimiento y es potestad del programador el decidir cuándo conviene usar este tipo de programación. En líneas generales, si la aplicación que hemos desarrollado es muy simple no tiene sentido plantearse este tipo de programación.

Tampoco puede que sea buena idea emplear el multihilo para aplicaciones excesivamente complejas pues provocará excesiva sobrecarga y sea más un problema que una ventaja.

Entonces la pregunta clave es ver cuñando va a ser ventajoso usar la programación multihilo que nos permitirá paralelizar la ejecución de varios procesos y de esta forma mejorar el rendimiento de nuestra aplicación.

Por regla general, se considera que una aplicación es candidata a ser programa en multihilo cuando cumple las siguientes premisas:

  1. La aplicación va a requerir se realizar diversas tareas claramente diferenciadas con un alto coste computacional que sea mayor al que se genera en un cambio de contexto, es decir, de liberación del espacio de memoria asignado.

  2. El resultado de las tareas que se ejecuten en diferentes hilos no debe depender del resultado de otras tareas, ya que, de lo contrario, las tareas se estarían esperando unas a otras y al final el rendimiento sería menor del esperado.

  3. Se prevea que pueda haber tareas retenidas o bloqueadas por estar esperando a una lectura de disco, por ejemplo. En estos casos, esta tarea se bloquea y otra entra en acción, aprovechando de esta forma la programación multihilo.

Ejemplos de ventajas de la programación multihilo

Para entender mejor lo que hemos comentado, pondremos dos ejemplos en los que puede resultar beneficioso el uso de la programación multihilo. Uno de los casos de uso más comunes es cuando una aplicación precisa acceder a diferentes orígenes, como servidores o bases de datos, para procesar la información recogida de cada origen.

En programación secuencial, los accesos a estos orígenes serían secuenciales y hasta que no tuviésemos toda la información, no podríamos procesarla. Si por el contrario usamos programación multihilo, podríamos lanzar en paralelo el acceso a los diferentes orígenes provocando una mejora sensible del rendimiento.

Un segundo caso de uso tradicional de la programación multihilo es cuando dentro de una aplicación queremos priorizar alguno de los procesos que comporta sobre el resto. Es muy habitual usar este tipo de programación en videojuegos priorizando la parte de renderización de la imagen sobre otros procesos paralelos que se ejecutan a la vez.

Como podemos ver en estos dos casos de uso, la mejora del rendimiento o la priorización de procesos, son las ventajas más claras que podremos obtener en la programación multihilo.

Si además nuestra aplicación multihilo se ejecuta sobre un sistema multiprocesador, entonces las ventajas se multiplicarán al paralelizar realmente todos los procesos, como hemos comentado el inicio de este post.

Espero que este post haya sido de vuestro interés y que a partir del mismo os sumerjáis un poco más en este tipo de programación que, aunque os pueda parecer novedoso, no lo es. Cuéntanos tus experiencias si alguna vez has desarrollado una aplicación multihilo.

Curso relacionado: FP de Grado Superior en Desarrollo Aplicaciones Multiplataforma

Profile picture for user Carlos Yañez
Carlos Yañez

Ingeniero Superior de Telecomunicaciones por la UPC. Director de Informática en un Laboratorio de Análisis con implantación nacional. Profesor de los cursos de Electrónica y Técnico en Sistemas Microinformaticos y Redes.