Für ein Projekt, welches ich bereits seit etwas längerer Zeit vorbereite, benötige ich eine sehr flexible IO-Schicht, mit der ich eine Reihe verschiedener Tätigkeiten wie IO und anderer Events möglichst flexibel parallelisieren kann. Nun gibt es für solche Aufgaben zwar üblicherweise Threads, aber da die Aufgaben zum einen sehr kurzweilig sind, andererseits aber unter gewissen Umständen blockieren können, funktioniert der Ansatz über Thread Pools nur bedingt. Eine vollständige asynchrone Bearbeitung der Ereignisse scheided auf Grund der Komplexität aber auch aus, da das System leicht erweiterbar bleiben muss. Was also benötigt wurde, ist ein Mittelweg aus beiden Ansätzen.
Ein Ansatz für einen solchen Mittelweg bieten Fibers, die analog zu POSIX Threads dem Programm erlauben, mehrere Ausführungsstränge zu erzeugen und damit die Abläufe in der Anwendung zu parallelisieren. Fibers fungieren dabei vollständig im User Mode und sind dadurch gegenüber PThreads oder gar geforkten Prozessen wesentlich leichtgewichtiger beim Wechseln des Zustands. (more…)