基于异步事件的编程框架基本上都有 Future
和 Promise
的概念。比如,
主流编程语言中 C++11 有std::future 和std::promise, 而
Java 1.5 开始有Future,
Java 1.8 有CompletableFuture.
Future & Promise 本质上是同一个计算的两个方面:1
-
对于调用者而言,调用某异步会立即返回。代价是调用返回的 Future 中可能并不包含计算结果,但包含对 Promise 的引用;
-
对于异步方法的实现者而言,它需要立即返回一个 Future 给调用者,同时需要运行异步任务(比如,通过提交任务到运行任务队列的线程池之类),得到结果后填入 Future 中的 promise 对象。