概要:
- モバイルオブジェクト:
- ユーザプロセスのリクエストに応じて、プロセスからプロセスへと移動する
- この章では、モバイルオブジェクトがネットワークを航行するためのアルゴリズム、を扱う:
- 性質の異なる三つの分散アルゴリズムを取り上げる
- 全てのアルゴリズムは、以下を保証する:
- 整合性: オブジェクトは同時に複数プロセスに存在しない
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 |
| URL: | http://voluntas.github.io/ |