Las dos de la tarde en una paquetería
Una empresa de paquetería de Sevilla pide a cada repartidor una foto de cada entrega. Un servicio reduce la foto y la guarda. Procesa 30 fotos por minuto.
A las dos de la tarde llegan 120 fotos por minuto. Si la app espera a que se guarde cada foto, el repartidor se queda parado en la puerta mirando el móvil.
Al final de esta lección
Nota
Puedo explicar por qué una cola deja que dos partes trabajen cada una a su ritmo.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Cola | lista de espera de trabajos | |
| Mensaje | un trabajo que hay que hacer | foto entrega 5501 |
| Productor | parte que deja mensajes en la cola | |
| Consumidor | parte que saca mensajes y hace el trabajo | |
| Pendientes | mensajes que aún esperan | |
| Trabajador | una copia del consumidor en marcha |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una cola está entre dos partes
Una cola es una lista de espera de trabajos. La app del repartidor es el productor: deja un mensaje en la cola y sigue con su ruta. Un mensaje dice, por ejemplo, "procesa la foto de la entrega 5501".
El servicio de fotos es el consumidor. Saca el mensaje más antiguo, hace el trabajo y saca el siguiente. Ninguna de las dos partes espera a la otra.
Prueba: una cola en Python
# Una lista usada como cola: se añade al final y se saca del principio
cola = []
# La app del repartidor deja tres fotos y sigue con su ruta
cola.append("foto entrega 5501")
cola.append("foto entrega 5502")
cola.append("foto entrega 5503")
print("Pendientes:", len(cola))
# El servicio de fotos coge la más antigua
foto = cola.pop(0)
print("Procesando", foto)
print("Pendientes:", len(cola))
# Añade la foto de la entrega 5504 y procesa dos fotos más.
# ¿Qué foto queda en la cola al final?
Los pendientes suben y luego bajan
Cada parte trabaja a su velocidad. Si llegan más mensajes de los que el consumidor procesa, los pendientes crecen. Cuando pasa la hora punta, el consumidor se pone al día y la cola baja.
Mientras esperan, los mensajes no se pierden. La foto aparece en el sistema unos minutos más tarde, y el repartidor nunca se ha quedado parado.
Ejemplo: la hora punta minuto a minuto
| Minuto | Fotos que llegan | Fotos procesadas | Pendientes al final |
|---|---|---|---|
| 14:00 | 120 | 30 | 90 |
| 14:01 | 120 | 30 | 180 |
| 14:02 | 20 | 30 | 170 |
| 14:03 | 0 | 30 | 140 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que una cola hace el trabajo más rápido. No es así: el servicio sigue procesando 30 fotos por minuto. La cola evita que una parte espere a la otra y absorbe los picos. Si los pendientes crecen todos los días y nunca bajan, hacen falta más trabajadores.
Más trabajadores vacían antes la cola
Puedes poner en marcha varias copias del consumidor, llamadas trabajadores. Cada una saca un mensaje distinto. Dos trabajadores de 30 fotos por minuto procesan 60 entre los dos.
La cola también ayuda cuando algo falla. Si el servicio de fotos se cae diez minutos, los mensajes esperan. Al volver, empieza por el más antiguo y no se pierde ninguna entrega.
Ejemplo: vaciar 600 fotos pendientes
| Trabajadores | Fotos por minuto | Minutos para vaciar |
|---|---|---|
| 1 | 30 | 20 |
| 2 | 60 | 10 |
| 4 | 120 | 5 |
| 5 | 150 | 4 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.