概要:
- モバイルオブジェクト:
- ユーザプロセスのリクエストに応じて、プロセスからプロセスへと移動する
- この章では、モバイルオブジェクトがネットワークを航行するためのアルゴリズム、を扱う:
- 性質の異なる三つの分散アルゴリズムを取り上げる
- 全てのアルゴリズムは、以下を保証する:
- 整合性: オブジェクトは同時に複数プロセスに存在しない
Push-Lazy-Push Multicast Tree.
高いスケーラビリティ、信頼性 (Reliability) 、回復力 (Resiliency) を達成するため、 流行性のブロードキャスト (Epidemic Broadcast) と、 決定論的なツリーに基づくブロードキャスト (Deterministic Tree-Based Broadcast) を統合する。
純粋な Gossip Protocol と異なり、ブロードキャスト用のツリーを構築するフェーズで、冗長な転送経路が取り除かれるので、重複するメッセージが大量に転送されることはない。
import scalaz._, Scalaz._ | |
case class KnightPos(c: Int, r: Int) { | |
def move: List[KnightPos] = | |
for { | |
KnightPos(c2, r2) <- List(KnightPos(c + 2, r - 1), KnightPos(c + 2, r + 1), | |
KnightPos(c - 2, r - 1), KnightPos(c - 2, r + 1), | |
KnightPos(c + 1, r - 2), KnightPos(c + 1, r + 2), | |
KnightPos(c - 1, r - 2), KnightPos(c - 1, r + 2)) if ( | |
((1 |-> 8) element c2) && ((1 |-> 8) contains r2)) |
namespace Persimmon.Runner.Wrapper | |
open Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging | |
open System | |
open System.Collections.Generic | |
open System.Reflection | |
module private TestCollectorImpl = | |
open Persimmon |
(* | |
Requirement: higher, ppx_deriving.show | |
*) | |
(* | |
Lightweight higher-kinded polymorphism | |
https://ocamllabs.github.io/higher/lightweight-higher-kinded-polymorphism.pdf | |
*) | |
open Higher |
;;;; Freer monad in Scheme | |
;;;; See also | |
;;;; * "Freer monads, more extensible effects" | |
;;;; http://dl.acm.org/citation.cfm?doid=2804302.2804319 | |
;;;; * Free monad in Scheme https://gist.github.com/wasabiz/951b2f0b22643a59aeb2 | |
(use gauche.record) | |
(use util.match) | |
;;; data Freer f a where | |
;;; Pure :: a -> Freer f a |
2022-03-18
@voluntas
2022.1