2010-10-28 14 views
6

Stavo cercando come funzionano i framework twisted e node.js e sono cercando di capire esattamente come il sistema operativo supporta le operazioni di I/O utilizzando i callback.Come viene implementata la programmazione guidata dagli eventi?

Capisco che va bene perché abbiamo bisogno di meno thread perché non abbiamo necessario avere thread bloccati in attesa di operazioni di I/O. Ma qualcosa deve chiamare il callback una volta che l'I/O è finito.

Come viene implementato dal sistema operativo?

risposta

5

Un approccio è quello di avere il sistema operativo allegare informazioni su chiunque in attesa di un callback per la struttura di dati rilevanti, come l'equivalente nel kernel del descrittore di file che stai aspettando per leggere la notifica. Quando succede qualcosa a quel descrittore di file, il sistema operativo esamina i camerieri per vedere se qualcuno dovrebbe essere avvisato. Se dovrebbero, allora lo fa. Puoi leggere circa un'implementazione di questo in Lemon's paper introducing FreeBSD's kqueue mechanism. Vedi in particolare la sezione 6, "Implementazione", sottosezioni 3 e 4, "Attività su sorgente di eventi" e "Consegna".

3

Questo è risolto in OS utilizzando "I/O notifica eventi di interfacce/interfacce", ad esempio epoll, sondaggio, kqueue o selezionare.

Dai uno sguardo allo deft e in particolare al suo 'io/event loop per un esempio concreto di come vengono utilizzati i "sistemi di notifica" sopra menzionati. (java.nio.channels.Selector è il modo nio java per fornire un'astrazione per questo.)

disclaimer: im a committer abile