Wenn Sie den Scala-Quellcode für scala.concurrent.Future und scala.concurrent.impl.Future lesen, scheint jede zukünftige Komposition über map
eine neue Aufgabe für einen Executor zu versenden. Ich nehme an, dass dies häufig einen Kontextwechsel für den aktuellen Thread und/oder eine Zuweisung eines Threads für den Job auslöst.Scala-Futures und Threads
In Anbetracht der Tatsache, dass Funktionsströme Futures zwischen ihnen passieren müssen, um auf Ergebnisse von Futures ohne Blockierung zu handeln (oder ohne in Callback Spaghetti zu vertiefen), ist dieses "reaktive" Paradigma in der Praxis sehr teuer, wenn Code gut geschrieben ist in einer modularen Weise, wo jede Funktion nur etwas klein macht und an andere weiterreicht?
Ja, es ist ... aber es soll "reaktiv" und nicht unbedingt "leistungsoptimiert" sein. –
Der Ansatz, den die Standardbibliothek in dieser Hinsicht annimmt, ist eine Designentscheidung und steht im Gegensatz zu Twitter's Implementierung von Futures, die für die Thread-Affinität optimiert ist - siehe z.B. [diese Finaglers Post] (https://groups.google.com/d/msg/finaglers/yWOr7-7CmPw/TBsJenqynQQJ) für eine Diskussion. –
Vielleicht würde @TravisBrown das in das Feld "Ihre Antwort" einfügen. Modulo seine Standards sind unmöglich hoch. Aber sein Kommentar ist länger als der vorherige. –