2009-07-03 13 views
8

Ho sperimentato un sacco di software open source e ho notato una discreta quantità di applicazioni di tipo server nel mondo open source utilizzare libevent per facilitare l'elaborazione basata sugli eventi piuttosto che generare più thread per gestire le richieste.libevent, windows e programmazione .NET

Faccio anche molta programmazione .NET (è la mia funzione principale del lavoro), e sono interessato ad apprendere come libevent si relaziona con il modello di eventi .NET. Gli eventi in .NET sono equivalenti a libevent per i programmi C? Dovrei provare ad imparare libevent e tentare di usarlo in applicazioni server .NET personalizzate o utilizzare il modello di eventi .NET standard fondamentalmente la stessa cosa?

risposta

8

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.