Asynchrone Programmierung
Funktionsweise von f.await
Abschnitt betitelt „Funktionsweise von f.await“Gegeben sei ein Future f. Welche der folgenden Aussagen beschreibt am besten, wie f.await funktioniert?
Rust verwendet ein Poll-basiertes Modell für die Ausführung von Futures. Ein await-Punkt wird in eine Schleife desugariert, die wiederholt .poll() aufruft und nach jeder erfolglosen Abfrage die Kontrolle an die asynchrone Laufzeit abgibt, um die Ausführung von anderem asynchronen Code zu ermöglichen. Die Laufzeit kann später den f.await-Code „aufwecken“, um f erneut abzufragen.
Pinning und undefiniertes Verhalten
Abschnitt betitelt „Pinning und undefiniertes Verhalten“Stellen Sie sich vor, Rust würde nicht verlangen, dass Futures gepinnt werden, um abgefragt zu werden. Welche der folgenden asynchronen Funktionen könnte potenziell undefiniertes Verhalten verursachen, wenn sie nicht gepinnt ist?
Das Kernproblem, das durch Pinning gelöst wird, ist die Selbstreferenz, oder ein Future, das einen Zeiger auf sich selbst enthält. Dies tritt auf, wenn ein asynchroner Block eine lokale Variable enthält, die auf eine andere lokale Variable innerhalb des Futures verweist. Hier wäre das y = &x.