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?
.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:
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.
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 .