Gli eventi sono uno dei paradigmi per ottenere l'esecuzione asincrona. Ma non tutti i sistemi asincroni utilizzano gli eventi. Riguarda il significato semantico di questi due:uno è la superentità di un altro.
epoll e aio usano metafore differenti:
epoll è un'operazione di blocco (epoll_wait()
) - blocchi il thread fino a quando non si verifica un evento e quindi invii l'evento a diverse procedure/funzioni/rami nel tuo codice.
In AIO, passi l'indirizzo della tua funzione di callback (routine di completamento) al sistema e il sistema chiama la tua funzione quando succede qualcosa.
Il problema con AIO è che il codice della funzione di callback viene eseguito sul thread di sistema e quindi in cima allo stack di sistema. Alcuni problemi con quello come puoi immaginare.
Sono cose completamente diverse.
Il paradigma guidato dagli eventi significa che un oggetto chiamato "evento" viene inviato al programma ogni volta che succede qualcosa, senza che quel "qualcosa" debba essere interrogato a intervalli regolari per scoprire se è successo. Tale "evento" può essere intercettato dal programma per eseguire alcune azioni (ad esempio un "gestore"), sia sincrone che asincrone.
Pertanto, la gestione degli eventi può essere sincrona o asincrona. JavaScript, ad esempio, utilizza un sistema di eventi sincrono.
Asincrono significa che le azioni possono avvenire indipendentemente dal flusso di esecuzione "principale" corrente. Intendiamoci, NON significa "parallelo" o "filo diverso". Un'azione "asincrona" può effettivamente essere eseguita sul thread principale, bloccando nel frattempo il flusso di esecuzione "principale". Quindi non confondere "asincrono" con "multi-threading".
Si potrebbe dire che, tecnicamente parlando, un'operazione asincrona assume automaticamente eventing -- almeno gli eventi "completati", "falliti" o "interrotti/cancellati" (uno o più di questi) vengono inviati all'istigatore dell'operazione (o allo stesso O/S sottostante) per segnalare che l'operazione è cessata . Pertanto, async è sempre guidato dagli eventi, ma non viceversa.
Event driven è un singolo thread in cui gli eventi vengono registrati per un determinato scenario. Quando si affronta quello scenario, gli eventi vengono licenziati. Tuttavia, anche in quel momento ciascuno degli eventi viene attivato in modo sequenziale. Non c'è niente di asincrono in questo. Node.js (server web) utilizza gli eventi per gestire più richieste.
Asincrono è fondamentalmente multitasking. Può generare più thread o processi per eseguire una determinata funzione. È totalmente diverso dall'evento guidato, nel senso che ogni thread è indipendente e difficilmente interagisce con il thread principale in modo facile e reattivo. Apache (server web) utilizza più thread per gestire le richieste in arrivo.