www.wikidata.de-de.nina.az
Ein Future engl Zukunft oder ein Promise engl Versprechen bezeichnet in der Programmierung einen Platzhalter Proxy fur ein Ergebnis das noch nicht bekannt ist meist weil seine Berechnung noch nicht abgeschlossen ist Ein Future ist meist das Ergebnis eines asynchronen Aufrufs einer Funktion oder einer Methode und kann verwendet werden um auf das Ergebnis zuzugreifen sobald es verfugbar ist Diese Art der Programmierung erlaubt eine weitgehend transparente Parallelisierung nebenlaufiger Prozesse Das Konzept der Futures wurde 1977 in einem Artikel von Henry G Baker und Carl Hewitt vorgestellt Eine zentrale Idee der Programmierung mit Futures ist dass Futures als Argumente an andere Prozeduraufrufe weitergereicht werden konnen Die Auswertung dieses Aufrufs kann dann schon beginnen bevor das Ergebnis des Futures selbst verfugbar ist Das erlaubt ein maximales Mass an Parallelismus Erfolgt der neue Aufruf wiederum asynchron so spricht man auch von Pipelining der Futures Pipelining kann insbesondere in verteilten Anwendungen benutzt werden um die Latenzzeiten von Interprozesskommunikation zu minimieren Inhaltsverzeichnis 1 Funktion 2 Aufbau 3 Beispiel 4 Literatur 5 Weblinks 6 EinzelnachweiseFunktion BearbeitenFutures sind ein Konstrukt zur asynchronen Interprozesskommunikation Konzeptionell bietet ein Future eine get oder join Funktion die so lange blockiert bis das Ergebnis vorliegt und dieses dann zuruckliefert Je nach Implementierung kann die Wartezeit mittels Timeout beschrankt werden oder durch zusatzliche Funktionen eine Abfrage des aktuellen Status erfolgen Sind Futures direkt in die Programmiersprache integriert so ist haufig nur ein asynchroner Zuweisungsoperator definiert zum Beispiel x Ausdruck in Flow Java einer an Java angelehnten experimentellen Programmiersprache Dies bedeutet Starte einen Prozess zum Berechnen des Ausdrucks der rechts des Operators steht und weise der Variable x ein Future fur das Ergebnis zu Wird danach auf die Variable x zugegriffen so wird an dieser Stelle so lange gewartet bis das Ergebnis vorliegt Programmiersprachen und Programmbibliotheken die Futures oder Promises unterstutzen sind CORBA mit Asynchronous Method Invocation AMI und ab Version 5 Java mittels Concurrency Utilities einer Klassenbibliothek fur Nebenlaufigkeit JavaScript stellt diese Konstrukte seit ECMAScript 6 bereit wenngleich derzeit noch in eingeschrankter Form 1 Rust stellt ebenfalls Futures zur Verfugung Auch fur C stehen verschiedene Bibliotheken zur Verfugung die wohl bekannteste von ihnen ist Boost Im Standard C 11 sind Nebenlaufigkeit und Futures ebenfalls in der Standardbibliothek verfugbar Weitere Programmiersprachen mit Unterstutzung fur Futures und Promises sind Io Oz Scheme Smalltalk und Scala In C 5 0 und Visual Basic 2013 werden Futures uber async und await implizit verwendet 2 Eine entsprechende Future Klasse ist hierbei in den Parallel Extensions definiert und kann somit auch in alteren Versionen und anderen Programmiersprachen verwendet werden Eine solche kann bei Bedarf allerdings auch selbst implementiert werden 3 4 5 Aufbau BearbeitenEin Future ist eine Monade mit einem zugehorigen Resolver welcher dem Future einen Wert zuweist Das Future kann sich in einem von drei Zustanden befinden erfullt englisch promise kept gebrochen englisch promise broken wartend englisch promise pending Wenn der Wert vom Resolver zugewiesen und damit bekannt ist generiert das Future ein Ereignis fur welche Ruckruffunktionen registriert werden Beispiel BearbeitenDer folgende Pseudocode zeigt die Verwendung von Futures mittels des asynchronen Zuweisungsoperators var x berechneX Beginne Berechnung von x var y berechneY Beginne Berechnung von y var z berechneZ Vollstandige Berechnung von z var ergebnis x y z Benutze x y und z Hier muss dann eventuell auf die Berechnung von x und y gewartet werden Daraus ergibt sich folgende Parallelisierung Haupt Thread X Thread Y Threadstarte berechneX starte berechneY berechneX berechneZ berechneY warte auf x und y berechne ergebnis Die Aufteilung der Berechnung auf mehrere Threads kann Berechnungen deutlich beschleunigen wenn mehrere Hauptprozessoren oder Prozessorkerne zur Verfugung stehen oder wenn die einzelnen Berechnungen den Hauptprozessor nicht auslasten weil sie etwa viel Zeit mit dem Warten auf Peripheriegerate verbringen Literatur BearbeitenHenry G Baker and Carl Hewitt The Incremental Garbage Collection of Processes Proceeding of the Symposium on Artificial Intelligence Programming Languages SIGPLAN Notices 12 August 1977 Henry Lieberman Thinking About Lots of Things at Once without Getting Confused Parallelism in Act 1 MIT AI memo 626 Mai 1981 Henry Lieberman A Preview of Act 1 MIT AI memo 625 Juni 1981 Weblinks BearbeitenPromisePipelining auf dem C2 wiki englisch Carl Hewitt Erik Meijer Clemens Szyperski Hewitt Meijer and Szyperski The Actor Model everything you wanted to know but were afraid to ask In Channel 9 Microsoft 9 April 2012 abgerufen am 22 Februar 2014 englisch Vortrag von Mark S Miller Secure Distributed Programming with Object capabilities in JavaScript auf YouTube englisch Vortrag von Mark S Miller Bringing Object orientation to Security Programming auf YouTube englisch Einzelnachweise Bearbeiten Promise In MDN Mozilla Foundation abgerufen am 31 Oktober 2014 englisch Asynchronous programming Windows Store apps In MSDN Microsoft abgerufen am 22 Februar 2014 englisch Futures In MSDN Parallel Programming with Microsoft NET Microsoft abgerufen am 22 Februar 2014 englisch Dan Vanderboom Concurrency amp Coordination With Futures in C In Critical Development 3 Juli 2008 abgerufen am 22 Februar 2014 englisch Matt Kotsenas at al C Promises In BitBucket Abgerufen am 23 Februar 2014 englisch Abgerufen von https de wikipedia org w index php title Future Programmierung amp oldid 226080732