Изображение слева is их работающие параллельно.
Пункт иллюстрации состоит в том, что метод Future.apply
- это то, что начинается с исполнения, поэтому, если это не произойдет до тех пор, пока результат первого будущего не станет flatMap
ed (как на картинке справа) t получить параллельное выполнение.
(Обратите внимание, что «стартовал», я имею в виду соответствующий ExecutionContext
говорят о работе. Как это параллелизует другой вопрос и может зависеть от таких вещей, как размер его пула потоков.)
Эквивалент код слева:
val numSummer = Future { ... } // execution kicked off
val charConcat = Future { ... } // execution kicked off
numSummer.flatMap { numsum =>
charConcat.map { string =>
(numsum, string)
}
}
и права:
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)
}
}
можно утверждать, что эта цифра должна быть названа «Flatma pping одновременно и последовательно », учитывая, что левый является совпадающим. – mdm
Но' concurrent' подразумевает повторное использование того же потока, нет? –
Не обязательно, насколько я понимаю. http://stackoverflow.com/questions/1897993/difference-between-concurrent-programming-and-parallel-programming или https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming; Последовательность будет заключаться в отсутствии перекрытия между выполнением. – mdm