Gran parte della confusione tra "message passing" e "event based" ha a che fare con i dettagli architettonici e di implementazione. Ho visto (e scritto) sistemi basati su eventi che effettivamente usano i messaggi forniti dal SO per la loro implementazione. Immagino che tu ti stia davvero riferendo alle idee architettoniche.
Come molte persone hanno già sottolineato che "message passing" e "event based" non sono termini veramente validi per evitare ambiguità.
What are the relative merits of a "message passing" system vs an "event based" system.
Passaggio del messaggio
Comincerò a indovinare che quando si dice un sistema di "passaggio di messaggi", si sta parlando di un sistema che un oggetto spende un messaggio su un altro oggetto specifico. Quando penso a un sistema basato su questo paradigma, penso più in generale a un sistema in cui un oggetto che rileva qualcosa sa chi deve essere informato su qualcosa. (Non sto specificando come lo sa, solo che lo sa.)
Questo tipo di architettura è molto buono per i sistemi in cui produttori e consumatori sono ben noti. O il produttore di un messaggio sa chi deve riceverlo, o il consumatore deve sapere da chi ottenere il messaggio.
Se stai scrivendo un'applicazione bancaria, ci si aspetterebbe che tu voglia veramente sapere a chi stai inviando le tue transazioni e da chi provengono.
Basato sugli eventi
L'altro sistema in cui credo tu stia pensando quando dici che un sistema basato su eventi è uno in cui un oggetto genera un "evento" senza sapere chi (se qualcuno) risponderà ad esso.
Questo tipo di architettura basata sugli eventi è molto buona per i sistemi in cui il produttore non si cura di chi consuma l'evento o dove il consumatore non si preoccupa veramente di chi ha prodotto l'evento.
In generale, questi sistemi sono fantastici dove non si conosce la relazione tra consumatori e produttori e dove ci si aspetta che la relazione sia dinamica.
Un sistema in cui ho usato questo era un sistema in cui l'applicazione era in realtà composta da moduli configurati dinamicamente (plug-in) caricati in fase di esecuzione. Quando un modulo è stato caricato, si registrerebbe per gli eventi a cui importava. Il risultato è stato un sistema in cui è stato molto semplice estendere la funzionalità.
Per esempio, diciamo condizione EA di evento sollevato che normalmente ha causato la risposta RA. L'oggetto che ha causato la risposta RA si è semplicemente registrato per ricevere l'evento EA e ha agito su di esso quando è arrivato. Ora, supponiamo di voler aggiungere una nuova risposta a EA, chiamata RA_1. Per fare ciò, aggiungiamo semplicemente un nuovo oggetto che cerca EA e genera la risposta RA_1.
Ecco un paio di esempi (usando la tua terminologia):
-
"messaggio che passa" : il tuo capo ti dice di compilare il tuo foglio dei tempi.
-
"event driven" : il segretario del dipartimento invia un'email a
tutti ricordano loro che i loro fogli orari sono dovuti oggi.