01 · Punto de partida
El recurso lleno necesita un “afuera” ordenado
En el Tema 7 el recurso se llenaba y las llegadas “iban a la cola”. Pero ¿qué es exactamente esa cola? No es un número: es un lugar con orden donde cada uno sabe quién está antes y cuánto lleva esperando.
Pensá en el banco con 2 cajas y 5 personas: 2 se sirven, 3 esperan. Esos 3 no están “en el aire”: están en la fila, con C5 primero, C6 segundo y C7 tercero. Si llega C8, va última. Si se libera una caja, entra C5. La cola es la memoria ordenada de la espera.
- ¿Dónde están los que esperan y en qué orden?
- ¿Cuántos hay y cuánto llevan esperando?
- ¿Quién entra primero cuando se libera un lugar?
- ¿La espera se mide por persona o en promedio?
02 · Definición
Lista, orden y medidas
Contenido
Lista de quienes esperan con su llegada: [C5(4), C6(6), C7(8)]. Sin lista no hay esperas individuales.
Disciplina
Regla de quién sigue: FIFO, LIFO, prioridades, aleatorio. Se fija una vez y se aplica siempre.
Medidas
Longitud Lq(t) (cuántos) y espera Wq (cuánto). Lo que no se mide no se puede dimensionar.
Distinción crucial que evita la mitad de los bugs: N = en sistema (cola + servicio), Nq = solo en cola. Cuando decimos “la cola tiene 3”, hablamos de Nq; cuando decimos “hay 5 en el banco”, hablamos de N.
| Medida | Qué cuenta | Ejemplo (2 en servicio + 3 en fila) |
|---|---|---|
| N (sistema) | Cola + servicio | 5 |
| Nq (cola) | Solo esperando | 3 |
| Ocupados | Solo sirviéndose | 2 |
| Wq / W | Espera / espera + servicio | W = Wq + S |
03 · Mecánica
Entrar, esperar y salir con orden
- 1Entrar.
Si
ocupados = c, la llegada se agrega al final (o según prioridad) con su hora:cola.append(C8@11). Nace la espera. - 2Esperar.
La entidad duerme en la lista. Su espera crece
Tp − llegadasin código: el tiempo la acumula sola. - 3Salir hacia el servicio.
Al liberarse un lugar, se extrae según disciplina (
pop(0)en FIFO), se registra su espera y empieza su servicio.
- Disciplina FIFO
- Primero en llegar, primero en salir. Justa y predecible; la base de todo el curso hasta el Tema 26.
- Capacidad de la cola
- Cuántos pueden esperar (finita o infinita). Si está llena, el que llega se pierde. (Tema 27)
- Abandono
- El que se cansa y se va sin ser atendido. La cola real pierde; la idealizada no. (Temas 27 y 38)
- Cola única vs. múltiples
- Una fila para 3 cajas (justa, se aprovecha cada hueco) o una fila por caja (rápida de ver, injusta y lenta). La única suele ganar.
Cola como número
Nq nada más
Sabés que hay 3 esperando, pero no desde cuándo ni quién sigue. Alcanza para promedios gruesos.
Cola como lista
Quiénes y desde cuándo
Sabés que C5 espera desde las 4 y sigue él. Habilita Wq individual, prioridades y abandono.
04 · Ejemplos
La misma espera en todos lados
| Sistema | La cola es… | Disciplina |
|---|---|---|
| Banco | Fila con tickets | FIFO (con caja prioritaria a veces) |
| Servidor web | Buffer de requests | FIFO (premium salta con prio) |
| Impresora | Spool de trabajos | FIFO (el grande bloquea: conviene SJF) |
| Guardia | Sala por triage | Prioridades (rojo > amarillo > verde) |
05 · Representación en Python
La cola es una lista con protocolo
Con collections.deque: entrar es append, salir es popleft (FIFO). La espera se registra al salir restando la llegada.
Python en tu navegador. El primer bloque opera la cola; el segundo mide la espera al salir. Cambiá el orden y mirá Wq.
from collections import deque
cola = deque()
cola.append({"id": "C5", "llegada": 4.0})
cola.append({"id": "C6", "llegada": 6.0})
print("Nq:", len(cola), "| primero:", cola[0]["id"])
siguiente = cola.popleft() # FIFO: sale C5
print("atiendo a", siguiente["id"], "| quedan:", len(cola))
from collections import deque
cola = deque([{"id": "C5", "llegada": 4.0}, {"id": "C6", "llegada": 6.0}])
reloj = 10.0
e = cola.popleft()
espera = reloj - e["llegada"]
print(e["id"], "esperó", espera) # C5 esperó 6.0
print("Nq ahora:", len(cola))
06 · Exploración
Laboratorio: ver la cola respirar
Llega uno cada A, atención S, 1 caja, horizonte 12. La escalera lima es N(t), la banda teal marca cuándo hay cola (Nq>0) y la tabla lista quién espera en Tp con su espera acumulada. Separá N de Nq con tus ojos.
N, Nq y quiénes esperan
Nq(t) = N(t) − ocupados(t) · Wq = inicio − llegada
Mueve Tp para inspeccionar la cola.
Escalera: N(t). Banda teal inferior: hay cola en ese tramo. Línea blanca: Tp. La ficha dice quiénes esperan y cuánto llevan.
Preguntas para explorar
- Con A=2, S=3 y Tp=6, ¿cuánto valen N y Nq? ¿Quiénes forman la Nq?
- Buscá un Tp sin cola pero con N>0. ¿Qué significa (quién está y dónde)?
- Con A=1, S=3, ¿la banda teal se apaga alguna vez? ¿Qué dice eso de Lq?
Ver respuestas sugeridas
- N=3 (uno en servicio + dos en fila), Nq=2: por ejemplo C2 y C3 esperando con esperas 2 y 0. N ≠ Nq.
- N=1, Nq=0: hay uno solo y está en servicio, nadie espera. Sistema ocupado sin cola: el mejor estado operativo.
- Casi nunca: la cola vive llena y el máximo Nq crece. Lq alta sostenida = capacidad insuficiente (ρ>1).
07 · Comprensión
Confusiones frecuentes
«N y Nq son lo mismo»
N incluye servicio; Nq solo espera. Informar N como “cola” infla Lq y arruina la Ley de Little (L ≠ Lq).
«W y Wq son lo mismo»
Wq es solo espera; W = Wq + S incluye servicio. Un banco con Wq=2 y S=3 tiene W=5: el cliente vive 5 en el sistema.
«La cola decide quién sigue»
La lista alberga; la disciplina + liberación deciden. Separar datos de regla evita lógica escondida.
«Guardar solo el conteo alcanza»
Para Lq media sí; para Wq individual, prioridades o abandono necesitás la lista con llegadas.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: N vs Nq
Con N=5 y 2 en servicio, ¿cuánto vale Nq? Generalizalo.
def en_cola(N, ocupados):
return N - ocupados
print(en_cola(5, 2)) # 3
print(en_cola(1, 1)) # 0: ocupado sin cola
Ver solución razonada
3 y 0. El segundo caso es clave: sistema ocupado sin espera, el ideal operativo que el laboratorio muestra como banda apagada con N=1.
Ejercicio 2: Wq al salir
C5 llegó en 4 y empieza en 10. ¿Cuánto esperó? ¿Y su W si S=3?
llegada, inicio, S = 4.0, 10.0, 3.0
wq = inicio - llegada
print("Wq:", wq, "| W:", wq + S)
Ver solución
Wq=6.0, W=9.0. La espera sola ya duplica el servicio: señal de capacidad escasa.
Ejercicio 3: FIFO con deque
Entran C5(4), C6(6), C7(8) y se libera dos veces en t=10 y t=13. ¿Quiénes salen y con qué Wq?
Ver una posible respuesta
from collections import deque
cola = deque([{"id": "C5", "llegada": 4.0}, {"id": "C6", "llegada": 6.0}, {"id": "C7", "llegada": 8.0}])
for reloj in [10.0, 13.0]:
e = cola.popleft()
print(e["id"], "Wq =", reloj - e["llegada"], "| quedan:", len(cola))
C5 con Wq=6.0 y C6 con Wq=7.0; queda C7. FIFO puro: el orden de llegada manda.
09 · Síntesis
Ideas para recordar
- Cola = lista ordenada de espera + disciplina; mide Lq (cuántos) y Wq (cuánto).
- N = cola + servicio; Nq = N − ocupados; W = Wq + S.
- En Python:
dequeconappend/poplefty entidades completas adentro. - La lista alberga, la regla decide: separar datos de disciplina.
- Sin lista hay promedios; con lista hay justicia, prioridades y abandono.
En el próximo tema veremos las actividades: lo que ocurre entre dos eventos con duración conocida.