C++: Multithreading

std::async

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
std::async verhält sich wie ein asynchroner Aufruf, von dem das Ergebnis später abgeholt werden kann.
03:57

Transkript

In dieser Lektion möchte ich Ihnen std::async genauer vorstellen. std::async verhält sich wie ein asynchroner Funktionsaufruf. Auch wenn ich bis jetzt std::async als Promise geschrieben habe, den Future zurückgibt, können Sie sich es auch als asynchronen Funktionsaufruf vorstellen. Hier habe ich einen std::async-Aufruf. Was macht er? Ich habe jetzt zwei Variablen a gleich 2000 und b gleich 11. Und was macht std::async? Kopiert sich die Variablen 2000 und 11 in seinen Funktionskörper rein, exakt die Lambdafunktion, addiert sie, und gibt sie als Ergebnis zurück. Das Ergebnis holt der Future hier ab. Indem er fut.get() aufruft. Das war der Standardfall für std::async. Die können aber auch ein bisschen anders verwenden. Also, erstens std::async erwartet eine aufrufbare Einheit und eventuell auch Argumente. Aufrufbare Einheit kann alles zeigen, was in die Funktion fällt, es kann die Funktion sein, ein Funktionsobjekt oder, wie hier, eine Lambda-Funktion. std::promise gibt ein std::future-Objekt zurück. Das ist fut hier. Und mit dem können Sie das Ergebnis des Promise in der Zukunft abfragen. Jetzt gibt es noch eine Feinheit. Dass sie dann dem std::async noch eine so genannte launching policy mitgeben kann. Das ist eine Art, wie dann Promise startet. Sie können sagen launch::async. Und Sie können sagen launch::deferred. launch::async bedeutet std::async wird explizit immer in einem anderen Thread ausgeführt. Und deferred bedeutet, es wird in dem gleichen Thread ausgeführt. Und, das ist noch sehr interessant, lazy. Das heißt, es ist beim ersten Aufruf get(), wird der Promise hier gestartet. Im allgemein gilt, dass ihre Laufzeit entscheidet, ob std::async im gleichen oder im anderen Thread ausgeführt wird. Nur durch launch und deferred entscheidet dieses. Und was ich dann noch mal wiederholen will, std::async ist die erste Wahl für eine Task. Das zeige ich Ihnen jetzt. In diesem Beispiel zeige ich Ihnen, wie Sie std::async, deferred und async aufrufen können. Das heißt hier verzögert, und hier in einem eigenen Thread. Anders ausgedrückt, hier auch in gleichem Thread. Was macht std::async? Das führt die Lambda-Funktion aus, die darin besteht, dass ich als Return-Wert die aktuelle Zeit zurückbekomme. Das tu ich für deferred und das tu ich für async. Dann schlafe ich hier für eine Sekunde. Und jetzt, jetzt restrickt mein Future den Promise ab. Und der feine Unterschied ist, dass beim Lazy, also wenn ich deferred ausführe, erst nach dem Aufruf get() hier der Promise anfängt zu arbeiten. Dagegen beim Eager, gierig, fängt das sofort an zu arbeiten. Das Ergebnis wird also sein, dass ich hier eine Sekunde warte, bis ich das Ergebnis bekomme. Und hier bekomme ich das Ergebnis gleich. Hier und hier arbeite ich die Zahlen noch ein bisschen auf, damit wir schön das Ergebnis in Sekundenauflösung bekommen. Und das war es schon. Dann führe ich das Programm aus. Und Sie sehen genau das, was ich versprochen habe. Im Lazy-Fall warten wir eine gute Sekunde. Im Eager-Fall wird der Promise sofort ausgeführt. In dieser Lektion habe ich Ihnen std::async vorgestellt. Ich habe Ihnen vorgestellt, dass wir std::async sowohl in einem eigenen Thread, wie auch im gleichen Thread starten lassen können. Und mein Rat ist, std::async sollte die erste Wahl für Sie sein, wenn Sie einen Task starten.

C++: Multithreading

Lernen Sie die High-Level Threading-Schnittstelle in C++ kennenb und nutzen, die Sie in Form von Threads, Tasks, Locks und Bedingungsvariablen zur Anwendung bringen.

2 Std. 40 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:16.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!