MULTITHREAD
Un thread o hilo es
un “semi-proceso”, que tiene su propia pila, y que ejecuta una porción de código dada. A diferencia de un proceso
real, un thread normalmente comparte su memoria con otros threads (en la cual, tal como sucede con los procesos, cada thread
tendrá asignado su espacio de memoria).
Un grupo de threads es un conjunto
de “hilos de ejecución” que están corriendo todos dentro del mismo proceso. Dado que comparten todos la misma
porción de memoria, pueden acceder a las mismas variables globales, la misma memoria de heap, los mismos descriptores de archivos,
etc. Todos corren en paralelo (por ejemplo: usando porciones del tiempo asignado al proceso en general o, si están dentro
de un sistema con multiprocesadores, pueden eventualmente correr de forma paralela realmente).
La ventaja de usar un grupo
de threads en lugar de un programa normal en serie es que muchas operaciones pueden ser llevadas a cabo de forma paralela
y, de esta forma, los eventos asociados a cada actividad pueden ser manejados inmediatamente tan pronto como llegan (por ejemplo:
si tenemos un thread manejando la interface de usuario y otro manejando las consultas a una base de datos, podremos ejecutar
consultas complejas realizadas por el usuario y aun así responder a la entrada del mismo mientras la consulta está siendo
ejecutada).
La ventaja de usar un grupo
de threads en vez de un grupo de procesos es que el cambio de contexto entre threads es realizado mucho más rápidamente que
el cambio de contexto entre procesos (un cambio de contexto significa que el sistema operativo cambia la ejecución de un thread
o proceso a la ejecución de otro). Por lo tanto, las comunicaciones entre dos threads son usualmente más rápidas y sencillas
de implementar que las comunicaciones entre dos procesos.
Por otro lado, debido a que
los threads dentro de un grupo comparten el mismo espacio de memoria, si uno de ellos corrompe el espacio de su memoria, los
otros threads también sufrirán las consecuencias. Con un proceso, el sistema operativo normalmente protege a un proceso de
otros y si un proceso corrompe su espacio de memoria los demás no se verán afectados.
Multithreading vs. Single threading
Así como podemos tener múltiples
procesos corriendo en nuestra PC, también podemos tener múltiples threads corriendo. De esta forma aparecen dos grandes grupos
de sistemas operativos respecto de la forma de ejecución de threads.
Single threading
· cuando el sistema operativo no reconoce al concepto de thread.
Multithreading
· cuando el sistema operativo soporta múltiples threads de ejecución
dentro de un proceso