Ich versuche herauszufinden, das Zeitplanungsmodell in der C ++ Version von Rx.
Kenntnis der C # -Version, in der es eine einfache Schnittstelle mit einer Schedule-Methode gibt; Die C ++ - Version scheint ziemlich komplex zu sein, mit Dingen wie Scheduler, Worker und Koordination.
Ein wichtiges fehlendes Stück für mich ist eine Implementierung eines Thread-Pool-Schedulers, existiert sie mit einem anderen Namen? Wie würde ich es selbst umsetzen? Soll ich es über PPL (Windows) schreiben? Wenn ich einen serialisierten (Actor like) Beobachter darüber brauche, was soll ich verwenden? Spähen hier und hier kann zeigen, dass dies keine triviale Aufgabe ist.
Es würde wirklich helfen, einen Überblick über das Thema zu bekommen, da die offizielle Dokumentation automatisch generiert wird und immer noch vorhanden ist wirklich spärlich.
Ja, die generierten Dokumente sind neu und die Planung ist noch nicht dokumentiert.
Der Scheduler in rxcpp v2 basiert auf den Scheduler- und Worker-Konstrukten, die RxJava verwendet (Eric Meijer war beteiligt) Die Dokumentation für RxJava enthält eine Erklärung für Scheduler und Worker. rxcpp fügt scheduling, Koordination und Koordinator hinzu.
scheduler
besitzt eine Zeitleiste, die mit der Methode now()
verfügbar gemacht wird. scheduler
ist auch eine Factory für worker
s in dieser Zeitleiste. Da ein Scheduler eine Timeline besitzt, ist es möglich, Scheduler zu erstellen, die Zeitreisen durchführen. Der Virtual-Scheduler ist eine Basis für den Test-Scheduler, mit dem Mehr-Sekunden-Tests in ms abgeschlossen werden können.
worker
besitzt eine Warteschlange mit ausstehenden schedulable
s für die Zeitleiste und hat eine Lebensdauer. Wenn die Zeit für ein schedulable
erreicht ist, wird schedulable
ausgeführt. Die Warteschlange behält die Einfügereihenfolge bei, wenn N schedulable
s dieselbe Zielzeit haben, werden sie in der Reihenfolge ausgeführt, in der sie in die Warteschlange eingefügt wurden. Der worker
garantiert, dass jeder schedulable
abgeschlossen ist, bevor der nächste schedulable
gestartet wird. Wenn die Lebensdauer von worker
abgemeldet ist, werden alle ausstehenden schedulable
s verworfen.
schedulable
besitzt eine Funktion und hat einen Arbeiter und ein Leben lang. Wenn die Lebensdauer von schedulable
abgemeldet ist, wird die Funktion schedulable
nicht aufgerufen. Das schedulable
wird an die Funktion übergeben und ermöglicht es der Funktion, sich selbst neu zu planen oder etwas anderes auf demselben Arbeiter zu planen.
Die neuen Konzepte sind Koordination und Koordination. Ich fügte diese hinzu, um Operatorimplementierungen zu vereinfachen und Pay-for-Use in Operatorimplementierungen einzuführen. Insbesondere in Rx.NET und RxJava verwenden die Operatoren atomare Operationen und Synchronisationsprimitive, um Nachrichten aus mehreren Streams zu koordinieren, selbst wenn sich alle Streams im selben Thread befinden (wie UI-Ereignisse). Die identity_. . .
-Koordinationen in rxcpp werden standardmäßig verwendet und haben keinen Overhead. Die syncronize_. . .
und observe_on_. . .
-Koordinationen verwenden Mutex bzw. Queue-auf-a-Worker, um mehrere Streams sicher zu verschachteln.
coordination
ist eine Factory für coordinator
s und hat eine scheduler
.
coordinator
hat eine worker
und ist eine Factory für koordinierte Funktionen observable
s, subscriber
s und schedulable
.
Alle Operatoren, die mehrere Streams verwenden oder sich zeitlich damit befassen (sogar subscribe_on und observe_on), nehmen einen Koordinationsparameter, nicht einen Scheduler.
Hier sind einige Funktionen, die eine Koordination mit einem bestimmten Scheduler erzeugen.
Es gibt noch keinen Thread-Pool-Scheduler. Ein Thread-Pool-Scheduler erfordert eine Abhängigkeit von einer Thread-Pool-Implementierung, da ich keinen Thread-Pool schreiben möchte. Mein Plan ist es, einen Scheduler für den Windows-Thread-Pool und den Apple-Thread-Pool und den Boost-Asio-Executor-Pool zu erstellen. Eine zu beantwortende Frage ist, ob diese plattformspezifischen Konstrukte im rxcpp-Repo leben sollen oder plattformspezifische Repos haben / p>
Beiträge, Meinungen und Ideen sind willkommen!
Tags und Links c++ threadpool system.reactive ppl rxcpp