2009-07-03 12 views
8

experimento con un montón de software de código abierto y he notado una buena cantidad de aplicaciones de tipo servidor en el mundo abierto de código abierto libevent para facilitar el procesamiento basado en eventos en lugar de generar múltiples hilos a manejar solicitudeslibevent, windows y .NET programación

También hago una gran cantidad de programación .NET (es mi función principal), y estoy interesado en aprender cómo se relaciona libevent con el modelo de eventos .NET. ¿Los eventos en .NET son equivalentes a libevent para los programas C? ¿Debo tratar de aprender libevent e intentar utilizarlo en aplicaciones de servidor .NET personalizado o estoy usando el modelo de evento .NET básicamente básicamente lo mismo?

Respuesta

8

.NET events y libevent no son equivalentes, aunque comparten conceptos abstractos.

. Los eventos .NET permiten una comunicación no determinista entre los componentes de CLR. In C#, el componente es un objeto - los eventos son miembros de la clase. En otros idiomas, like F#, no se requieren objetos. Un evento permite a los usuarios suscribirse a las notificaciones que se producen en las condiciones específicas de la fuente - se hace clic en un botón, una descarga se haya completado, se produjo una excepción, etc. Algunas características de los eventos de .NET:

  • Son no relacionado con el sistema operativo subyacente
  • Puede definir eventos para cualquier condición.
  • No son intrínsecamente asíncronos (el notificador y el notificado no necesariamente se ejecutan al mismo tiempo, aunque pueden hacerlo).

libevent permite no determinista, la comunicación asíncrona entre el OS y un consumidor. Esto puede parecerse a los eventos .NET porque ambos invierten el control, pero los mecanismos son muy diferentes.

  • libevent utiliza la E/S no bloqueante específica del sistema operativo (/dev/poll, kqueue, epoll) para mejorar el rendimiento. Sus resultados variarán según el sistema operativo y el mecanismo que utilice.
  • Las condiciones del evento libevent incluyen cambios de estado en descriptores de archivos, señales del sistema operativo o tiempos de espera. No puede definir condiciones de devolución de llamada arbitrarias.
  • libevent es inherentemente asincrónico. El consumidor no bloquea mientras espera que regrese el sistema operativo.

¿Debo tratar de aprender libevent y intento de utilizarlo en aplicaciones de servidor personalizados .NET ...?

Si lo haces por diversión, claro. Si lo haces por trabajo, probablemente no. libevent reclama sus mayores ganancias de rendimiento en los sistemas * nix. Windows usa un paradigma de red diferente. Los desarrolladores libevent son addressing these differences en la versión 2, pero 2.0.5 todavía es una versión beta.

Además, .NET ofrece sus propias bibliotecas de E/S sin bloqueo including asynchronous sockets.

Cuestiones relacionadas