libevent, Windows und .NET Programmierung

8

Ich experimentiere mit einer Menge Open-Source-Software und habe eine Menge serverartiger Anwendungen in der Open-Source-Welt bemerkt. Verwenden Sie libevent, um ereignisbasierte Verarbeitung zu ermöglichen, anstatt mehrere Threads zur Bearbeitung von Anfragen zu erstellen.

Ich mache auch eine Menge .NET-Programmierung (es ist meine Kernaufgabe), und ich bin interessiert zu erfahren, wie sich libevent auf das .NET-Ereignismodell bezieht. Sind Ereignisse in .NET äquivalent zu Libevent für C-Programme? Sollte ich versuchen Libevent zu lernen und versuchen, es in benutzerdefinierten .NET-Server-Anwendungen zu verwenden oder verwendet das Standard-.NET-Ereignismodell im Grunde die gleiche Sache?

    
Chris 03.07.2009, 06:41
quelle

1 Antwort

8

.NET-Events und Libevent sind nicht gleichwertig, obwohl sie abstrakte Konzepte teilen.

.NET-Ereignisse ermöglichen nichtdeterministische Kommunikation zwischen CLR-Komponenten. In C # ist die Komponente ein Objekt - Ereignisse sind Klasse Mitglieder. In anderen Sprachen, wie F # , sind keine Objekte erforderlich. Ein Ereignis ermöglicht es Benutzern, Benachrichtigungen zu abonnieren, die unter bestimmten Bedingungen in der Quelle auftreten - eine Schaltfläche wird angeklickt, ein Download ist abgeschlossen, eine Ausnahme ist aufgetreten usw. Einige Eigenschaften von .NET-Ereignissen:

  • Sie sind nicht an das zugrunde liegende Betriebssystem gebunden
  • Sie können Ereignisse für jede Bedingung definieren.
  • Sie sind nicht von Natur aus asynchron (der Notifier und der Notified laufen nicht unbedingt gleichzeitig, obwohl sie auch funktionieren können).

libevent ermöglicht nicht-deterministische, asynchrone Kommunikation zwischen dem Betriebssystem und einem Verbraucher. Dies könnte sich ähnlich wie bei .NET-Ereignissen anfühlen, da beide die Kontrolle invertieren, aber die Mechanismen sind sehr unterschiedlich.

  • libevent verwendet OS-spezifische, nicht blockierende E / A ( / dev / poll, kqueue, epoll ) Leistung verbessern. Ihre Ergebnisse variieren je nach verwendetem Betriebssystem und Mechanismus.
  • Libevent-Ereignisbedingungen umfassen Statusänderungen in Dateideskriptoren, Betriebssystemsignalen oder Timeouts. Sie können keine beliebigen Callback-Bedingungen definieren.
  • libevent ist von Natur aus asynchron. Der Verbraucher blockiert nicht, während er auf die Rückkehr des Betriebssystems wartet.
  

Sollte ich versuchen, Libevent zu lernen und   Versuchen Sie, es in benutzerdefiniertem .NET zu verwenden   Serveranwendungen ...?

Wenn du es aus Spaß machst, sicher. Wenn Sie es für die Arbeit tun, wahrscheinlich nicht. Libevent beansprucht seine größten Leistungszuwächse auf * nix-Systemen. Windows verwendet ein anderes Netzwerkparadigma. Die Libevent-Entwickler sind diese Unterschiede in Version 2 behoben aber 2.0.5 ist immer noch eine Beta-Version.

Darüber hinaus bietet .NET eigene nicht blockierende E / A-Bibliotheken einschließlich asynchrone Sockets .

    
Corbin March 14.06.2010, 18:53
quelle

Tags und Links