Un hilo (thread) es un flujo de control dentro de un proceso. Varios hilos comparten el mismo espacio de direcciones, lo que los hace mucho más ligeros que los procesos ("procesos ligeros").
Ver también: Sistemas Operativos/Procesos.
Ejemplo de Tanenbaum: un procesador de textos con un hilo que interactúa con el usuario, otro que reformatea el documento y otro que guarda en disco periódicamente. O un servidor web con un hilo despachador y varios hilos trabajadores.
| Elementos por proceso (compartidos) | Elementos por hilo (privados) |
|---|---|
| Espacio de direcciones | Contador de programa |
| Variables globales | Registros |
| Archivos abiertos | Pila |
| Procesos hijos | Estado |
| Alarmas pendientes | |
| Señales y manejadores |
Cada hilo necesita su propia pila porque llama a procedimientos distintos y tiene su propio historial de ejecución.
| Llamada | Descripción |
|---|---|
pthread_create |
Crea un hilo |
pthread_exit |
Termina el hilo actual |
pthread_join |
Espera a que un hilo termine |
pthread_yield |
Cede la CPU a otro hilo |
pthread_attr_init |
Inicializa atributos |
Una biblioteca en espacio de usuario gestiona los hilos; el kernel sólo ve un proceso.
El Sistemas Operativos/Kernel conoce y planifica cada hilo.
Se multiplexan m hilos de usuario sobre n hilos de kernel (modelo M:N). Las activaciones del planificador (scheduler activations) usan upcalls del kernel para avisar a la biblioteca cuando un hilo se bloquea.
Se crea un hilo nuevo al llegar cada mensaje, en lugar de tener uno bloqueado esperándolo.
errno que varios hilos sobrescriben → usar variables globales privadas por hilo.malloc).Compartir memoria trae los problemas de Sistemas Operativos/Concurrencia.