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 предлагает свои собственные неблокирующие библиотеки ввода / вывода, включая асинхронные сокеты.