April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
Future/Promiseは、1977年に論文で紹介されたタスク分割の手法です。重い処理がすべて独立しているのであれば、前述のWaitGroupやErrGroupで十分です。Future/Promiseは、お互いのタスクに依存関係がありグラフ構造をしているときに使えるパターンです。
Future/Promiseを使う場合は、「今はまだ得られてないけど将来得られるはずの入力」(Future)を使って必要な条件がそろったら実行されるロジックを実装します。 Futureと対になるのが「将来、値を提供するという約束」(Promise)で、これが満たされると、Futureを使ったロジックが実行されます。

Javaでは、バージョン1.5から標準ライブラリのjava.util.concurrent.Futureとして導入されています。
次のようなすごく重い計算処理(エミュレーションのためにスリープで実現しています)があるとします。AとBは単独で動作しますが、CはAとB、DはAとCに依存しています。
func A() int {
time.Sleep(time.Second)
return 10
}
func B() int {
time.Sleep(time.Second * 2)
return 5
}
func C(a, b int) int {
time.Sleep(time.Second * 1)
Read now
Unlock full access