La risposta di Theon offre una buona panoramica moderna. Mi piacerebbe aggiungere una prospettiva storica.
Tony Hoare e Robert Milner hanno entrambi sviluppato algebra matematica per l'analisi di sistemi concorrenti (Comunicare processi sequenziali, CSP e Comunicare sistemi concorrenti, CCS). Entrambi sembrano una matematica pesante per molti di noi, ma l'applicazione pratica è relativamente semplice. CSP ha portato direttamente al linguaggio di programmazione Occam, tra gli altri, con Go che è l'ultimo esempio. CCS ha portato al calcolo del Pi e alla mobilità delle estremità del canale di comunicazione, una caratteristica che fa parte di Go ed è stata aggiunta a Occam nell'ultimo decennio.
Concorrenza di modelli CSP considerando esclusivamente entità automomiche ("processi", v.cose leggere come fili verdi) che interagiscono semplicemente per scambio di eventi. Il mezzo per passare eventi è lungo i canali. I processi possono dover gestire diversi input o output e lo fanno selezionando l'evento che è pronto per primo. Gli eventi di solito portano dati dal mittente al destinatario.
Una caratteristica principale del modello CSP è che una coppia di processi si impegna nella comunicazione solo quando entrambi sono pronti - in termini pratici ciò porta a quella che viene solitamente definita comunicazione "sincrona". Tuttavia, le implementazioni effettive (Go, Occam, Akka) consentono il buffering dei canali (lo stato normale in Akka) in modo che lo scambio di eventi lock-step sia spesso effettivamente disaccoppiato.
Quindi, in sintesi, un sistema basato su CSP basato sugli eventi è in realtà una rete di flussi di dati collegati da canali.
Oltre all'interpretazione CSP dell'evento, ce ne sono stati altri. Un esempio importante è l'approccio "ruota degli eventi", una volta apprezzato per la modellazione di sistemi concorrenti, mentre in realtà ha un singolo thread di elaborazione. Tali sistemi gestiscono gli eventi mettendoli in una coda di elaborazione e gestendoli a tempo debito, solitamente tramite una richiamata. Il motore di elaborazione degli eventi di Java Swing è un buon esempio. Ce n'erano altri, ad es. per i motori di simulazione basati sul tempo. Si potrebbe pensare che il modello Javascript/NodeJS si adatti anche a questa categoria.
Quindi, in sintesi, una ruota di eventi era un modo per esprimere la concorrenza ma senza parallelismo.
L'ironia di questo è che i due approcci che ho descritto sopra sono entrambi descritti come eventi guidati, ma ciò che significano per evento guidato è diverso in ciascun caso. In un caso, le entità di tipo hardware sono collegate insieme; nell'altro, quasi tutte le azioni sono eseguite da callback. L'approccio CSP afferma di essere scalabile perché è completamente componibile; è naturalmente abile anche nell'esecuzione parallela. Se ci sono motivi per preferire l'uno all'altro, probabilmente lo sono.
-1. Che cosa hai fatto/letto finora per avere un'idea di cosa sia la concorrenza guidata da eventi? Google dovrebbe almeno essere in grado di aiutarti in questo. I primi tre successi per me sono: http://berb.github.io/diploma-thesis/original/055_events.html, https://www.youtube.com/watch?v=2gcrTsQ7yi4, https: // en. wikipedia.org/wiki/Event-driven_programming. –