Fasern in C #: sind sie schneller als Iteratoren und haben die Menschen verwendet, um sie?

StackOverflow https://stackoverflow.com/questions/1881473

  •  18-09-2019
  •  | 
  •  

Frage

Also habe ich mit einem Kollegen plauderte über Fasern und aufgedreht dieses Papier von 2003 , die eine Implementierung von Koroutinen in C # mit dem Fiber-API beschreibt .

Die Umsetzung der Yield in dieser Arbeit war es für .NET 1.1, so dass es schon vor der yield return Syntax, die .NET 2.0 erschienen.

Es sieht auf jeden Fall auf den ersten Blick, dass die Umsetzung ist hier schneller potenziell und ziemlich gut mehrere CPUs skalieren über konnte.

Hat jemand es verwendet?

War es hilfreich?

Lösung

Ich habe es nicht, aber ich habe ein Interesse an dem Thema. Hier ist eine schöne Umsetzung von Koroutinen in C # mit einem Round-Robin-Scheduler: http://www.bluebytesoftware.com/blog/PermaLink.aspx?guid=71235c5a-3753-4bab-bdb0-334ab439afaf

By the way, zitiert wikipedia „Fasern beschreiben im Wesentlichen das gleiche Konzept als Koroutinen“. Soweit ich weiß, ist die nächste Sache zu einem Koroutine (oder eine Faser) in C # Iteratoren. Eigentlich sind sie bemerkenswert nahe an Koroutinen. Lippert geschrieben mehrere Fänge über Iteratoren. Hoffentlich keiner von ihnen ein ernstes Problem für die Zwecke stellen Sie benötigen.

Andere Tipps

Ich habe Grundlage des Ausstoßes „Koroutinen“ verwendet, und ich muss sagen, dass sie ein Schmerz im Hintern sind. Das Problem ist natürlich, dass überall, wo Sie sie verwenden möchten, sind Sie die Ausbeute Syntax verwenden gezwungen. Nicht nur das, aber wenn man die Kette Ausbeuten (Eltern Erträge Kinder Ausbeute), können Sie nur je Nest Ihrer Koroutinen eine Ebene tiefer. Das komplett zerstört einen der wichtigsten Vorteile von Koroutinen (Voll Stapel Speichern / Wiederherstellen).

Ich implementierte eine Faserbasis Koroutine System in C # und es funktioniert wunderbar, bis ich eine Ausnahme treffen. Leider speichert die .NET-Laufzeit eine Reihe von internen Ausnahme Sachen in der OS-Threads, was bedeutet, dass (und p / aufrufen) mit OS Fasern mehrere Threads Emulation einfach nicht funktionieren, wenn Sie nie, nie, nie eine Ausnahme haben.

Koroutinen, auf den ersten Blick meine Aufmerksamkeit auf sich zieht .. vor einigen Tagen i für Workflow-Lösung für parrallel AsyncWCF Methode gesucht nennt und was ich fand, war wirklich faszinierend:

http://csharperimage.jeremylikness.com/2010 /03/sequential-asynchronous-workflows-in.html

Dieser Artikel zeigt eine sehr gute Verwendung von Koroutinen Workflows in Silverlight-Anwendung erstellen / verwalten, die WCF mit Async Mustern verbraucht.

Ich weiß nicht, seine Geschwindigkeit WRT Iteratoren aber mir seine wie eine erweiterte Form von Subroutinen, die in unternehmenskritischen Aufgaben sehr hilfreich sein kann, wo ein normales Unterprogramm können Sie den Luxus nicht bieten eine Aufgabe parallel auszuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top