Pregunta

experimento I con una gran cantidad de software de código abierto y me he dado cuenta de una buena cantidad de aplicaciones de tipo servidor en el mundo del código abierto libevent uso para facilitar el procesamiento basado en eventos en lugar de freza múltiples hebras para atender las peticiones.

También hago un montón de programación .NET (es mi función de trabajo del núcleo), y estoy interesado en aprender cómo libevent se relaciona con el modelo de eventos de .NET. Son eventos en el equivalente de .NET libevent para programas en C? Debería tratar de aprender libevent e intentar utilizarlo en aplicaciones de servidor personalizados .NET o está utilizando el modelo de eventos de .NET estándar básicamente la misma cosa?

¿Fue útil?

Solución

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

.NET eventos permiten la comunicación no determinista entre los componentes CLR. En C # , el componente es una - objetos hechos son miembros de la clase. En otros idiomas, como F # , no se requieren los 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:

  • No está atado al sistema operativo subyacente
  • Se pueden definir eventos para cualquier condición.
  • No son inherentemente asíncrona (el notificante y el notificado no necesariamente están funcionando al mismo tiempo, aunque pueden ser).

libevent permite no determinista, la comunicación asíncrona entre el OS y un consumidor. Esto podría sensación similar a .NET eventos, ya que tanto el control invertido, pero los mecanismos son muy diferentes.

  • libevent utiliza específica del SO, sin bloqueo de E / S ( / dev / encuesta, kqueue, epoll ) para mejorar el rendimiento. Sus resultados pueden variar dependiendo del sistema operativo y el mecanismo que utiliza.
  • condiciones de eventos libevent incluyen cambios de estado en los descriptores de archivo, las señales del sistema operativo, o tiempos de espera. No se pueden definir las condiciones de devolución de llamada arbitrarias.
  • libevent es asíncrona inherentemente. El consumidor no se bloquea mientras espera para el sistema operativo para volver.
  

¿Debo tratar de aprender y libevent   intente utilizarlo en la costumbre .NET   aplicaciones de servidor ...?

Si lo haces por diversión, seguro. Si lo estás haciendo para el trabajo, probablemente no. libevent afirma que sus mayores ganancias de rendimiento en sistemas * nix. Windows utiliza un paradigma de redes diferentes. Los desarrolladores están libevent abordando estas diferencias en la versión 2 pero 2.0.5 es todavía una versión beta.

Además, .NET ofrece su propio yo no bloqueo de E / S bibliotecas incluidos sockets asíncronas .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top