In una architettura basata sugli eventi ogni componente agisce solo quando un evento viene inviato attraverso il sistema.
Immagina un'auto ipotetica con un pedale del freno e una luce del freno.
- La spia del freno si accende on quando riceve un evento brake_on e off quando riceve brake_off evento.
- Il pedale del freno invia un evento brake_on quando viene premuto, e un evento brake_off quando viene rilasciato.
Questo è tutto a posto, finché non si ha la situazione in cui la macchina è accesa con il pedale del freno già premuto . Poiché la luce del freno non ha mai ricevuto un evento brake_on , rimarrà spenta - chiaramente una situazione indesiderabile. L'accensione della luce del freno per impostazione predefinita inverte solo la situazione.
Che cosa si potrebbe fare per risolvere questo "problema di stato iniziale"?
EDIT: grazie per tutte le risposte. La mia domanda non riguardava un'automobile reale. Nelle auto hanno risolto questo problema inviando continuamente lo stato - quindi non c'è alcun problema di avvio in quel dominio. Nel mio dominio software, quella soluzione userebbe molti cicli di CPU non necessari.
EDIT 2: oltre alla risposta di @ gbjbaanb , sto andando per un sistema in cui:
- l'ipotetico pedale del freno, dopo l'inizializzazione, invia un evento con il suo stato, e
- l'ipotetica luce del freno, dopo l'inizializzazione, invia un evento che richiede un evento di stato dal pedale del freno.
Con questa soluzione, non ci sono dipendenze tra componenti, nessuna condizione di gara, nessuna coda di messaggi per andare in stallo e nessun componente "master".