📝メッセージパッシングモデル - Message Passing Model

Message-passing concurrency, メッセージ伝達並行性

メッセージパッシングモデルとそのプログラミング手法.

ネットの検索結果ではメッセージパッシングがよく引っかかるのでこれを採用. 📝CTMCPの4章ではメッセージ伝達モデル.

データを端末(アクター, プロセス, スレッド)に送信する.

📝メッセージパッシング

📝並行プログラミング📝オブジェクト指向プログラミングやプロセス間通信でメッセージ(順序づけられた文字列)をやり取りするための通信方式.

RMI, シグナル, データパケット…

📝通信プロトコル(Communication Protocol)の言い換えといってもいい.

考慮すべき観点はいろいろであり目的に応じて選択.

  • 同期/非同期
  • 通信相手
    • 一対一
    • 多対一(クライアントサーバ)
    • 一対多(マルチキャスト)
  • 順序保証
  • 誤り訂正

📝同期通信と非同期通信

同期/非同期通信及びのそのプログラミング方法.

📝同期通信

Syncronious, syncronized,

送信者と受信者がお互いにメッセージの転送を待つ. 送信者は受信者がメッセージを受信するまでプログラムを再開できない.

メリットはプログラムが(非同期に比べて)単純になる. またバッファを必要としないことでメモリ効率はよい.

デメリットは待つことよる時間, 時間効率は悪い.

📝非同期通信

Asyncronious. asyncとかと略される.

読み方注意. ei or ae. エーシンクと語頭を伸ばす. アシンクではない. 恥をかくポイント.

メリットは送信者は受信者がメッセージを受け取るまで待つ必要はない. 時間効率はよい. バッファをつかうので, バッファのサイズを設定して, それが溢れたら送信者をブロックするかその後のメッセージを切り捨てる必要がある.

ノンブロッキング

ある処理が終わるまで別の処理が待たないという概念.

非同期処理

非同期通信をつかった処理.

🆚並列処理と非同期処理の違い

よくスレッドと非同期が同じコンテキストで登場するが, 別の概念.

並列は複数スレッドだが、非同期処理は単一スレッド. データ受け渡しやメモリリソースのオーバヘッドがあるので、ほとんどの場合は非同期処理/通信で充分.

スレッドは端末であり, 非同期はプロトコル. 非同期通信の処理が非同期処理.

サーバとネットワークくらいの違いがあるものの, サーバもネットワークもアプリからアクセスするときに両方経由するような感じで, コミュニケーションを達成するという観点でいえばセットで登場するのも納得.

🤔エラーリカバリーは同期通信

システムにおける緊急事態において, エラーリカバリーの処理が最優先になり, スレッドを握って他のプロセスに渡さないためには非同期通信よりも同期通信で行うのがいい.

🔖エラーリカバリー

🤔電話は同期通信でメールは非同期通信

ホリエモンが激怒するやつ.

人間をアクターとするならば, 電話は相手の時間をブロッキングする. メールはリアルタイムにやり取りする必要はない.

電話は同期通信のプロトコルであり, メールは非同期通信のプロトコル.

こういう身近な例で情報技術を理解することは大事な気がする. 他人への説明の例でも使いやすい.

📝Actor モデル

複数のスレッドが通信のためにメッセージをおくりあう.

Scala や Erlang で採用されている方法.

手紙を送り合うような比喩が使われる.

Functinal Reactive Programming

ある変化に応じて動作する, イベント駆動のプログラミング方法.

Reactive Programmig には, 2 つの種類があるそうだ.(浅海さんのプレゼンから)

  • Actor Model
  • Monadic Model

以下の記事がわかりやすい.

GUI, インフラ, ビッグデータ処理など様々な場面で浸透しつつあります. 今までは複雑すぎて作ることが難しかったアプリケーションが簡単に設計できるようになっていくでしょう.

時間とともに変化する”値を表すデータ型.

FRP は非同期データストリームを用いるプログラミングである ( FRP is programming with asynchronous data streams)

シグナル

シグナルとは, 時間とともに変化する値. このシグナルを扱ってイベントを処理する方法.

シグナルには以下の面倒をみる責務がある.

  • 現在の値
  • 現在の値に対応する評価
  • その値に依存する他のシグナル (Observers)

リアクティブ性

ref. 2015 年に備えて知っておきたいリアクティブアーキテクチャの潮流 - Qiita

リアクティブと一言で言った時に, 現状では 2 つの含意があります.

  • アーキテクチャの各要素をメッセージ駆動でつなげ, 反応的に変化させること.
  • メッセージの送受信を隠蔽し値同士の関係 (data-flow) を宣言的 (関数型的) に記述するプログラミングパラダイム

変数 a, b について, 以下のように情報を更新したとき,

  1. a = 3
  2. b = 2 + a
  3. a = 1

最終的には, a = 1, b = 3 になるようにする. 手順 3 で, a の更新に対して b も更新されるところがリアクティブ.

リアクティブ宣言

リアクティブ宣言なんという, かっこいい文章も存在する.

4 つの原則がある

  • Responsive:即時応答する
  • Elastic:伸縮自在である
  • Message Driven:メッセージ駆動である
  • Resilient:回復力がある

📝CSPモデル

Communicating Sequential Processes.

GoやClojureで採用されている方法.

プロセス代数

深く情報を終えていないがCSPについて調べていたらWikipediaのプロセス代数にたどり着いたのでメモ. この理論が背景にある.

💡クイックソートの人が考案

考案したアントニー・ホーアさんはなんとクイックソートの発明者.

Axiomatic semantics: 公理的意味論もこの人とか.

References