Das Bild auf der linken Seite ist sie parallel laufen.
Der Punkt der Abbildung ist, dass die Future.apply
Methode ist es, was die Ausführung startet, also wenn es nicht geschieht, bis das Ergebnis der ersten Zukunft flatMap
ed (wie im Bild rechts) ist, können Sie dann don‘ t bekomme die parallele Ausführung.
(Beachten Sie, dass durch „gekickt“, meine ich die relevanten ExecutionContext
über den Job erzählt. Wie es parallelisiert ist eine andere Frage und kann auf Dinge wie die Größe des Thread-Pool ab.)
Equivalent-Code für links:
val numSummer = Future { ... } // execution kicked off
val charConcat = Future { ... } // execution kicked off
numSummer.flatMap { numsum =>
charConcat.map { string =>
(numsum, string)
}
}
und für das Recht:
Future { ... } // execution kicked off
.flatMap { numsum =>
Future { ... } // execution kicked off (Note that this does not happen until
// the first future's result (`numsum`) is available.)
.map { string =>
(numsum, string)
}
}
Argumentieren, sollte die Zahl genannt werden „Flatma pping gleichzeitig versus sequentiell ", vorausgesetzt, dass die linke die gleichzeitige ist. – mdm
Aber" gleichzeitig "impliziert die Wiederverwendung des gleichen Threads, nein? –
Nicht unbedingt, soweit ich es verstehe. http://stackoverflow.com/questions/1897993/difference-between-concurrent-programming-and-parallel-programming oder https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming; sequentiell wäre, wenn es keine Überschneidungen zwischen den Ausführungen gibt. – mdm