Pixelaula.
Procesos e hilos · Lección 5 de 5

Hilos que esperan trabajo

Crear un hilo por cada tarea sale caro. Al terminar sabrás dimensionar un pool para un servidor web.

⏱ 25–35 min▶ Video de 90 s🧪 Laboratorio con 4 misiones
00 · En 90 segundos

Primero, la idea completa

Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.

    01 · Cientos de hilos

    Que otro cree los hilos

    Escribir a mano una aplicación con cientos de hilos es difícil: hay que acertar con la concurrencia, el paralelismo y que el resultado sea correcto. La estrategia de los hilos implícitos pasa esa tarea a los compiladores y las bibliotecas: quien programa solo identifica las tareas que pueden ir en paralelo, y el sistema decide cuántos hilos crear y cómo asignárselas.

    02 · Pools de hilos

    Hilos que esperan trabajo

    Crear un hilo es más barato que crear un proceso, pero sigue costando, y más si se descarta al terminar cada tarea. Además, crear hilos sin límite puede agotar la memoria. La solución es un pool de hilos: al arrancar, el programa crea un grupo de hilos que esperan trabajo. Cuando llega una tarea, la toma uno libre; al terminar, no se destruye: vuelve al pool.

    • Usar un hilo que ya existe es más rápido que crear uno nuevo.
    • El pool limita cuántos hilos hay a la vez, lo que protege a un sistema que no aguanta demasiados.
    • Separar la tarea de cómo se ejecuta permite estrategias flexibles, como retrasarla o repetirla periódicamente.

    El tamaño del pool suele basarse en la cantidad de núcleos, aunque algunos sistemas lo ajustan solos según la carga.

    03 · Divide y vencerás

    Fork-join

    En el modelo fork-join, el padre crea hilos hijos para partes del problema (fork) y luego espera a que todos terminen para combinar los resultados (join). Es síncrono y encaja con los algoritmos recursivos de divide y vencerás: el problema se parte hasta que es lo bastante pequeño para resolverlo directamente. Java lo incluye desde la versión 7, y una biblioteca decide cuántos hilos reales usar.

    Escena 1

    Sumar 16 números con fork-join. Elige el umbral: cuando un trozo es de ese tamaño o menor, se suma directamente sin partirlo más.

    Umbral

    Otras herramientas de hilos implícitos son OpenMP (directivas para paralelizar bucles en C y C++), Grand Central Dispatch (de Apple), Intel Thread Building Blocks y CUDA de NVIDIA, que reparte el trabajo entre miles de núcleos de la tarjeta gráfica.

    04 · Lo que se complica

    Problemas de los hilos

    • fork() y exec(): si un hilo llama a fork(), ¿se duplican todos los hilos o solo el que llamó? Y exec() reemplaza el proceso entero, con todos sus hilos.
    • Señales: ¿a qué hilo se entrega una señal enviada al proceso?
    • Cancelación: terminar un hilo antes de tiempo, de inmediato o en puntos seguros.
    • Almacenamiento local: datos que cada hilo necesita propios, aunque compartan todo lo demás.
    • Activación del planificador: la coordinación entre la biblioteca de hilos y el kernel.
    05 · En Linux

    Un proceso y un hilo son lo mismo

    Linux no distingue de verdad entre procesos e hilos: ambos son una task_struct, y se dice tarea. La llamada clone() crea una tarea nueva e indica, con banderas, qué comparte con la que la crea. Sin compartir nada, el resultado se comporta como un proceso; compartiéndolo todo, como un hilo.

    Escena 2

    Elige qué comparte la tarea nueva con su creadora en clone().

    06 · Predice

    Antes de leer la respuesta

    Truco para tu laboratorio
    Cada vez que cambias el modo, el pool o la carga, empieza una medición nueva. Las misiones se cumplen con 20 ticks seguidos de una misma configuración.
    Laboratorio

    Tu turno: un servidor web bajo carga

    Un servidor web con 4 núcleos y memoria para 24 hilos. Le llegan solicitudes: con carga baja, una cada dos ticks; con carga alta, seis cada cinco ticks. Cada solicitud necesita 3 ticks de CPU, y crear un hilo nuevo cuesta 2 más. Compara un hilo por solicitud con un pool de hilos.

    Repaso

    Comprueba lo que entendiste

    Cada respuesta incorrecta explica por qué parece correcta y en qué falla.