Java CompletableFuture
CompletableFuture とは Java8 で導入された Java の並行処理 API CompletableFuture は関数型プログラミングスタイルを使用した非同期処理とリアクティブ API が実行できる Future / CompletionStage を継承した便利クラス Reactive Programming と CompletableFuture Reactive Programming とは データをストリームとして認識 データを受け取るたびにプログラムが反応して処理を行うこと 必要なデータを自ら取得して処理をするスタイルではない データの生産側はデータの消費側がどういう処理をしているのか意識しない データの消費側の処理を待つ必要がなくなる→非同期 データを通知した後はすぐに別の次の処理を行うことができる→ノンブロッキング データの消費者の負荷状況に関わらず一方的にデータを通知し続ける状況への対応手段の提供→バックプレッシャー リアクティブシステムの性質 Reactive API のようなリアクティブシステムには以下4つの性質がある(Reactive manifesto) Responsive(即応性) 基本的に非同期 リクエストはすぐ呼び出され、データが利用可能な時に呼び出し側へレスポンスが返される Resilient(耐障害性) システムは例外やエラーなどの障害に直面しても即応性を保ち続ける 耐障害性は、レプリケーション・封じ込め・隔離・移譲によって実現される Elastic(弾力性) システムはワークロードが変動しても即応性を保ち続ける リアクティブシステムは入力の提供に割り当てるリソースを増加あるいは減少させることで入力量の変化に反応する これは、システムの中に競合する場所や中心的なボトルネックが存在しないように設計し、シャーディングしたりレプリケーションしたコンポーネント間に入力を分散させることを意味する Message Driven(メッセージ駆動) リアクティブシステムは非同期なメッセージパッシングによってコンポーネント間の境界を確立する これによって疎結合性・隔離性・位置透過性を保証するとともに、エラーをメッセージとして移譲する手段を確保する システム内にメッセージキューを作成して監視し、必要ならバックプレッシャーを適用することでフロー制御が可能になる CompletableFuture API CompletableFuture クラスのメソッドは三つのカテゴリに分けられる Factory メソッド 非同期計算を開始する Completion Stage メソッド 非同期計算を実現するために使用される 例外メソッド 例外を処理する supplyAsync() / thenAccept() supplyAsync() Factory メソッド 非同期計算を開始するために使用される。バックグラウンドのタスクをトリガーし、すぐに返す 二つのリアクティブシステムの性質を持つ Responsive....