Pergunta

I experimentar com um monte de software de código aberto e tenho notado uma grande quantidade de aplicações do tipo servidor no libevent uso no mundo open source para facilitar baseado em eventos de processamento, em vez de desova vários segmentos aos pedidos do punho.

Eu também faço um monte de .NET programação (é a minha função de trabalho core), e eu estou interessado em aprender como libevent relaciona-se com o modelo de evento .NET. São eventos em .NET o equivalente a libevent para programas em C? Devo tentar aprender libevent e tentar usá-lo em aplicações de servidor personalizados .NET ou está usando o modelo de evento do .NET padrão basicamente a mesma coisa?

Foi útil?

Solução

.NET eventos e libevent não são equivalentes, embora eles compartilham conceitos abstratos.

.NET eventos permitir a comunicação não-determinista entre os componentes CLR. Em C # , o componente é um objeto - eventos são membros da classe. Em outras línguas, como F # , objetos não são necessários. Um evento permite que os consumidores a subscrever notificações que ocorrem em condições específicas na fonte - um botão é clicado, um download estiver concluído, ocorreu uma exceção, etc. algumas características de .NET eventos:

  • Eles não estão vinculados ao sistema operacional subjacente
  • Você pode definir eventos para qualquer condição.
  • Não são inerentemente assíncrona (o notificador eo notificado não estão necessariamente em execução ao mesmo tempo, embora possam ser).

libevent permite que não-determinístico, comunicação assíncrona entre o OS e um consumidor. Isso pode sentir semelhante ao .NET eventos porque ambos controle invertido, mas os mecanismos são muito diferentes.

  • libevent usa específicas do OS, non-blocking I / O ( / dev / poll, kqueue, epoll ) para melhorar o desempenho. Os resultados variam dependendo do sistema operacional e do mecanismo que você usa.
  • condições de eventos libevent incluem mudanças de estado em descritores de arquivos, sinais mínimos, ou tempos de espera. Você não pode definir condições de retorno de chamada arbitrárias.
  • libevent é inerentemente assíncrona. O consumidor não bloquear enquanto aguarda o SO para retorno.

Eu deveria tentar aprender libevent e tentar usá-lo em .NET personalizada aplicações de servidor ...?

Se você está fazendo isso por diversão, com certeza. Se você está fazendo isso para o trabalho, provavelmente não. libevent reivindica seus maiores ganhos de desempenho em sistemas * nix. O Windows usa um paradigma de rede diferente. Os desenvolvedores libevent são abordar estas diferenças na versão 2, mas 2.0.5 ainda é uma versão beta.

Além disso, .NET oferece seu próprio non-blocking I / O bibliotecas incluindo soquetes assíncronos .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top