Domanda

Drivato agli eventi e asincroni sono spesso usati come sinonimi. Ci sono differenze tra i due?

Inoltre, qual è la differenza tra epoll e aio? Come si adattano insieme?

Infine, ho letto molte volte che AIO in Linux è orribilmente rotto. Come si spezza esattamente?

Grazie.

È stato utile?

Soluzione

Gli eventi sono uno dei paradigmi per raggiungere l'esecuzione asincrona. Ma non tutti i sistemi asincroni utilizzano eventi. Questo è il significato semantico di questi due: uno è la super -entità di un altro.

EPOLL e AIO usano metafore diverse:

Epoll è un'operazione di blocco (epoll_wait()) - Blocchi il thread fino a quando non si verificano un evento e quindi si spedisce l'evento su diverse procedure/funzioni/filiali nel codice.

In AIO, si passa l'indirizzo della 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 così come lo stack di sistema. Alcuni problemi con questo come puoi immaginare.

Altri suggerimenti

Sono cose completamente diverse.

Il paradigma basato sugli eventi significa che un oggetto chiamato "evento" viene inviato al programma ogni volta che succede qualcosa, senza che "qualcosa" deve essere interrogato a intervalli regolari per scoprire se è successo. Tale "evento" può essere intrappolato dal programma per eseguire alcune azioni (cioè un "gestore") - sincrono o asincrono.

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 indipendenti dal flusso di esecuzione "principale" attuale. Intendiamoci, lo fa NON significa "parallelo" o "thread diverso". Un'azione "asincrona" può effettivamente eseguire sul thread principale, bloccando il flusso di esecuzione "principale" nel frattempo. Quindi non confondere "asincrono" con "multi-thread".

Potresti dire che, tecnicamente parlando, un'operazione asincrona automaticamente assume Eventing - almeno "completato", "guasto" o "aborti/annullati" eventi (uno o più di questi) vengono inviati all'istigatore dell'operazione (o lo stesso O/S sottostante) per segnalare che l'operazione è cessata . Pertanto, l'asincronizzazione è sempre guidata dagli eventi, ma non viceversa.

Evento guidato è un singolo thread in cui gli eventi sono registrati per un determinato scenario. Quando viene affrontato quello scenario, gli eventi vengono licenziati. Tuttavia, anche a quel tempo ciascuno degli eventi viene sparato in modo sequenziale. Non c'è nulla di asincrono in questo. Node.js (WebServer) utilizza eventi per gestire più richieste.

L'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 che difficilmente interagisce con il filo principale in modo reattivo facile. Apache (WebServer) utilizza più thread per gestire le richieste in arrivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top