libevent, windows and.NET Программирование

я экспериментирую с большим количеством программного обеспечения с открытым исходным кодом, и я заметил, что значительное количество приложений типа сервера в мире с открытым исходным кодом используют libevent для облегчения обработки на основе событий, а не порождают несколько потоков для обработки запросов.

Я также много программирую .NET (это моя основная функция задания), и мне интересно узнать, как libevent относится к модели событий .NET. Являются ли события в .NET эквивалентом libevent для программ C? Должен ли я попытаться научиться? libevent и пытается использовать его в пользовательских приложениях .NET server или использует стандартную модель событий .NET в основном то же самое?

1 ответов


.NET события и libevent не эквивалентны, хотя они разделяют абстрактные понятия.

события .NET допускают недетерминированную связь между компонентами среды CLR. В C# компонент-это объект - события являются членами класса. На других языках, вроде F# объекты не требуется. Событие позволяет потребителям подписаться на уведомления, которые происходят на определенных условиях в источнике-кнопка нажата, загрузка завершена, исключение произошли и т. д. Несколько характеристик событий .NET:

  • они не привязаны к базовой ОС
  • вы можете определить события для любых условий.
  • они по своей сути не асинхронны (уведомитель и уведомленный не обязательно работают одновременно, хотя они могут быть).

libevent допускает недетерминированную асинхронную связь между OS и потребителем. Это может показаться похожим на .NET события, потому что они оба инвертируют управление, но механизмы очень разные.

  • libevent использует специфичный для ОС неблокирующий ввод-вывод( / dev / poll, kqueue, epoll) для повышения производительности. Ваши результаты будут варьироваться в зависимости от используемой ОС и механизма.
  • условия события libevent включают изменения состояния в дескрипторах файлов, сигналах ОС или таймаутах. Вы не можете определить произвольные условия обратного вызова.
  • libevent по своей сути является асинхронным. Потребитель не блокирует во время ожидания возврата ОС.

должен ли я попытаться узнать libevent и попытка использовать его в пользовательском .NET серверное приложение...?

Если вы делаете это для удовольствия, конечно. Если ты делаешь это ради работы, то, скорее всего, нет. libevent заявляет о своем наибольшем повышении производительности в системах *nix. Windows использует другую сетевую парадигму. Разработчики libevent являются устранение этих различий в версии 2 но 2.0.5 все еще бета-версия.

кроме того, .NET предлагает свои собственные неблокирующие библиотеки ввода-вывода в том числе асинхронные сокеты.