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

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

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

8
задан Chris 3 July 2009 в 06:41
поделиться

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

8
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: