📝メッセヌゞパッシングプログラミング

📝メッセヌゞパッシングプログラミング

October 31, 2022

📝メッセヌゞパッシングモデル - 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:回埩力がある

See Also #

📝CSPモデル #

Communicating Sequential Processes.

GoやClojureで採甚されおいる方法.

プロセス代数 #

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

💡クむック゜ヌトの人が考案 #

考案したアントニヌ・ホヌアさんはなんずクむック゜ヌトの発明者.

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

References #