Also habe ich dieses Video auf Youtube mit all diesen C ++ - Mastern auf GoingNative 2012 gesehen: Interaktives Panel, in dem jeder die Fragen stellen konnte.
Dies ist das Video, über das ich gesprochen habe: GoingNative 2012 - Tag 1 - Interaktives Panel: Die Wichtigkeit, einheimisch zu sein
Und um 0:24:00 stellte jemand eine sehr interessante Frage:
Wir programmieren seit einiger Zeit gleichzeitig mit Pthreads, Windows-Threads usw. und ich bin so froh, dass C ++ und C die gleichzeitige Programmierung eingeholt haben, aber es scheint mir, dass sie bereits um fünf oder zehn Jahre zurückliegt Jahre, weil wir jetzt alle diese leistungsstarken Multicores haben und die Programmierung dieser Multicores wirklich nicht auf Threads basieren sollte, sondern aufgabenbasiert sein sollte [...] und Microsoft die PPL-Bibliothek hat und so weiter und das ist total spiegelt sich nicht im C ++ - Standard wider. [...] Das einzige, wovor ich Angst habe, ist, dass der Standard in Threads eingeschlossen sein könnte und es sehr schwierig macht, zur aufgabenbasierten Programmierung überzugehen ...
Jetzt bin ich ziemlich neu in diesen Konzepten und ein wenig verwirrt. Was ist eigentlich Aufgabe-basierte Programmierung . Bezieht sich dieser Begriff auf dasselbe, worauf sich Lock-Free Programming bezieht? Gibt es diese beiden gleichwertigen Begriffe oder gibt es Verbindungen zwischen ihnen?
Does this term refer to the same thing that Lock-Free Programming refers to? Are these two equivalent terms or are there any links between them?
Kann jemand erklären? Sind all diese aufgabenbasierten Bibliotheken auch auf Threads aufgebaut oder wurden sie auf andere Weise implementiert? Vielen Dank!Antworten:
Microsoft hat die "Task Parallel Library" oder TPL.
Es ist eine übergeordnete Abstraktion über Threads und bibliotheksbasiert. Daher sehe ich keinen Grund, warum etwas Ähnliches in C ++ nicht erstellt werden konnte, da die TPL bereits threadbasiert ist und nicht von speziellen Funktionen in der Sprachstandard für seine Implementierung (obwohl die Schlüsselwörter
async
undawait
dem C # -Compiler hinzugefügt wurden, um eine solche Programmierung zu vereinfachen).Eine Aufgabe in der Microsoft-Ökostruktur entspricht mehr oder weniger einer Zukunft oder einem Versprechen . Grundsätzlich handelt es sich um eine nicht blockierende (asynchrone) Funktion. Wenn Sie es aufrufen, gibt es die Kontrolle an Sie zurück, während es in einem neuen Thread ausgeführt wird, und Sie rufen den Rückgabewert zu einem späteren Zeitpunkt ab, wenn er verfügbar ist.
Die TPL verfügt über andere Funktionen
Parallel.For
, mit denen Sie eine Schleife gleichzeitig mit mehreren Threads verarbeiten können. All diese Dinge könnten in C ++ als Bibliotheksfunktionen implementiert werden. Tatsächlich wurde eine solche Bibliothek bereits geschrieben .Soweit ich weiß, hängt die PPL (Parallel Patterns Library für Microsoft C ++) nicht von speziellen Sprachfunktionen ab.
quelle
Task
und aThread
besteht darin, dass eine Aufgabe nicht unbedingt eine Funktion darstellt, die in einem anderen Thread ausgeführt wird. Es stellt alles dar, was beendet oder ein Wert generiert werden könnte, ohne auf dem aktuellen Thread ausgeführt zu werden. Es kann das Ergebnis sein, dass überhaupt kein Thread ausgeführt wird, wenn er keine CPU-gebundene Arbeit darstellt. Das wahrscheinlich häufigste Beispiel ist asynchrone E / A. Es stellt nicht dar, wann eine Funktion in einem anderen Thread endet. Es stellt dar, wann ein bestimmter Betriebssystem-Hook ausgelöst wird.Task
Es ist Ihnen egal, wie es abgeschlossen ist, und Sie können es als "jede asynchrone Operation" behandeln.TaskCompletionSource
. Die Idee ist, dass Sie eine Aufgabe erstellen und dann weiter ausführen. Dieser Thread führt schließlich etwas aus, das das Ergebnis des TCS festlegt, sodass die Aufgabe vollständig ausgeführt wird, ohne dass mehr als ein Thread ausgeführt werden muss.In cpp gibt es seit Ewigkeiten Threads-via-Blocks-Bibliotheken. Es gibt Intels Thread-Bausteine , die ziemlich gut sind, und es gibt ähnliche Dinge wie OpenMP , mit denen Sie das Threading auf eine Art und Weise abstrahieren können, die das System für Sie erledigt (dies wird von VC ++ unterstützt, Sie müssen das / einstellen openmp flag in deinen Builds)
Microsoft arbeitet auch an Casablanca , das möglicherweise keine wirklich generische Aufgabenbibliothek ist, sondern ein Framework zum Schreiben von aufgabenbasierten Systemen (hauptsächlich für Web-App-Zwecke) unter Verwendung eines ähnlichen Modells wie Erlang
quelle