Un publicar() tiene letra pequeña
En las clases anteriores de esta unidad construimos callbacks, listeners, un sujeto observable y un bus de mensajes. Todo funcionaba por una razón que no dijimos en voz alta: los suscriptores se portaban bien. Recibían el aviso, hacían su trabajo y devolvían el control.
Hoy toca lo contrario. Mientras el sujeto recorre su lista, cada suscriptor puede cambiar el sistema que le está llamando.
Qué es una ronda
Una ronda empieza al entrar en publicar() y termina cuando publicar() retorna. Si un suscriptor publica durante su turno, empieza una ronda anidada antes de que acabe la primera.
Ahora imagina que la Pantalla, durante su turno…
- …da de baja a la Sirena → orden y cambios en la lista (bloque 1).
- …vuelve a llamar a
publicar()→ reentrancia y ciclos (bloque 2). - …lanza una excepción o tarda 3 segundos → antipatrones (bloque 3).
Las cuatro preguntas de la letra pequeña
1 · Orden
¿Se garantiza que se avisa en el orden de alta?
2 · Altas y bajas en la ronda
¿Afectan a la ronda en curso o a la siguiente?
3 · Reentrancia
¿Se puede publicar desde un suscriptor? ¿Se entrega ya o se encola?
4 · Fallos
Si un suscriptor lanza, ¿se sigue avisando a los demás?
Responde para continuar
0/2publicar().