Como su propio nombre indica el ‘multithreading’
(procedente de ‘thread’: hilo, en
consecuencia ‘múltiples hilos’) es
una técnica muy común en el mundo de la informática que permite ejecutar secuencias
de instrucciones (diferentes partes de un programa) de forma simultánea y en
paralelo con otras funciones. Dicho de otra manera el multithreading permite
ejecutar múltiples subprocesos a la vez (o de forma concurrente). De esta
manera se optimizan al máximo los recursos disponibles, ya que se pueden
procesar instrucciones de dos o más hilos a la vez utilizando el paralelismo a
nivel de hilo (ya hemos visto otro tipo de uso del paralelismo: segmentación). Lo que supone un uso racional y
eficiente de los recursos de nuestro ordenador, ya que empleamos los recursos
que ya están en uso para una tarea simultánea con una ligera variante de un
mismo proceso.
A la tarea de crear un nuevo ‘hilo’ de ejecución dentro de un proceso
existente, en vez de empezar un nuevo proceso para una nueva función es a lo
que denominamos ‘multithreading’.
Como
hemos esbozado al principio los threads o
‘hilos’ son semiprocesos que
comparten memoria y datos entre ellos y están caracterizados por un punto
definido de comienzo, una secuencia de ejecución y un punto de finalización.
Así
es posible utilizar tareas que
se ejecutan en segundo plano, tratar flujos de entrada simultáneos, administrar
interfaces de usuario, entre otras cosas.
Por lo tanto algunas de las ventajas del
multithreading son: que las aplicaciones tienen un mejor tiempo de respuesta
(incluso en máquinas con un solo CPU), que permite que una aplicación utilice
varios procesadores simultáneamente y, en definitiva, produce un mejor
aprovechamiento del sistema informático.
Otras de las ventajas que se pueden
advertir con respecto a la programación secuencial son: la división de las
secuencias de instrucciones o tareas en partes más simples, tratando cada una
de ellas de forma parcial o completamente en paralelo. También el
multithreading aprovecha los tiempos muertos que pueda encontrar en varias
sub-fases en la resolución de problemas para construir otra parte del proceso. A
lo que se suma que el multithreading es más barato en términos de recursos de
sistema utilizados que los sistemas multiproceso.
Para desempeñar de forma óptima su tarea el
multithreading utiliza contadores de programas independientes, mecanismos de
etiquetado para distinguir las instrucciones de diferentes hilos y un mecanismo
que ‘dispara’ el cambio de hilo.
También tendremos que diferenciar el
‘multi-hilo preventivo’ en el que el sistema operativo distribuye el tiempo del
proceso entre los hilos y los interrumpe a intervalos regulares para dar paso
al siguiente en la cola (ejemplo: Windows 95/ NT,Unix) y el ‘multi-hilo
cooperativo´ en el que cada hilo o thread toma el control de la CPU el tiempo
que necesita.
Las
tareas que involucran mucha ejecución, las operaciones de matrices, las tareas
de procesamiento de señales digitales, los elementos llamados por una
aplicación con frecuencia, la validación de datos y los procesos que consumen
mucho tiempo de CPU, entre otros, son los más indicados para utilizar los
multithreading.
Por este
motivo el multithreading juega un papel clave en los procesadores gráficos
actuales, ya que es muy sencillo aprovechar los paralelismos. Por ejemplo, en
los cálculos que se deben realizar para cada vértice o fragmento, se produce el
ahorro de tener que repetir la misma tarea una y otra vez sobre diferentes
datos en memoria.
Ejemplo
de multithreading en una tarjeta gráfica
Por lo tanto, la capacidad de las GPUs actuales
que solucionan cálculos de manera eficaz aprovechando los paralelismos a través
del multithreading, no solo se utilizan para generar gráficos sino que se
emplean también en complejas operaciones de cálculo científico que se descomponen
a la vez en muchos hilos que resuelven dichas operaciones.
Algunas de las APIS (application programming interface) como DirectX11 de Microsoft, incluye el multithreading entre sus cualidades, con lo que consigue tasas de frames por segundo (FPS) más rápidos para los juegos, sin perder por ello ningún detalle visual.
No hay comentarios:
Publicar un comentario