Gli eventi .NET e libevent non sono equivalenti, sebbene condividano concetti astratti.
Gli eventi .NET consentono la comunicazione non deterministica tra componenti CLR. In C#, il componente è un oggetto - gli eventi sono membri della classe. In altre lingue, like F#, gli oggetti non sono richiesti. Un evento permette ai consumatori di sottoscrivere le notifiche che si verificano sulle condizioni specifiche della fonte - un pulsante viene cliccato, un download, si è verificata un'eccezione, ecc alcune caratteristiche di eventi .NET:
- Sono non collegato all'OS sottostante
- È possibile definire eventi per qualsiasi condizione.
- Non sono intrinsecamente asincroni (il notificatore e il notificato non funzionano necessariamente allo stesso tempo, anche se possono essere).
libevent permette non deterministica, la comunicazione asincrona tra il OS e un consumatore. Questo potrebbe sembrare simile agli eventi .NET perché entrambi invertono il controllo, ma i meccanismi sono molto diversi.
- libevent utilizza I/O non specifico di blocco del sistema operativo (/dev/poll, kqueue, epoll) per migliorare le prestazioni. I risultati varieranno a seconda del sistema operativo e del meccanismo che utilizzi.
- le condizioni degli eventi libeventi includono cambiamenti di stato nei descrittori di file, segnali OS o timeout. Non è possibile definire condizioni di callback arbitrarie.
- libevent è intrinsecamente asincrono. Il consumatore non si blocca mentre attende il ritorno del sistema operativo.
Devo cercare di imparare libevent e tentativo di utilizzarlo in applicazioni .NET personalizzata server ...?
Se lo stai facendo per divertimento, certo. Se lo fai per lavoro, probabilmente no. libevent afferma i suoi maggiori guadagni in termini di prestazioni sui sistemi * nix. Windows utilizza un diverso paradigma di rete. Gli sviluppatori libevent sono addressing these differences nella versione 2 ma 2.0.5 è ancora una versione beta.
Inoltre, .NET offre le proprie librerie di I/O non bloccanti including asynchronous sockets.
fonte
2010-06-14 18:53:51