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

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

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

1 ответ

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам