annotate presen/sample.markdown @ 6:edc72425caab

add abstract
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2016 11:25:52 +0900
parents
children ef17e4dc6216
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: 分散フレームワークAliceのPC画面配信システムへの応用
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: 照屋のぞみ 河野真治
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile:琉球大学 工学部 情報工学科
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 # 研究目的(1/3)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 * 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 * ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。  
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 * Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 # 研究目的(2/3)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 * Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 * 分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 * 仕様を大きく変更することなくプログラムの挙動が変えられる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 * 変更前の信頼性を保ったまま拡張可能にする
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 # 研究目的(3/3)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 * 本研究では、 Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 * 構築するにあたり必要となった機能を洗い出しAliceのMeta Computationとして実装した。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 * もとのTreeVNCとの比較を行うことでMetaComputationの役割と有効性を示す。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 # Data Segment と Code Segment
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 * Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割して依存関係を記述することでプログラミングを行う。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 * CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 * CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 ![opt](./images/dsandcs.svg){:width="60%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 # CodeSegmentの依存関係
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 * データの依存関係にないCSは並列実行される
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 * データの依存関係がある場合は Input DS が揃うと順に実行される
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 * DSはCSに専有されるためロックの記述を必要としない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 ![opt](./images/dsandcs2.svg){:width="60%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 # Data Segment と CodeSegment
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 * AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 * ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 * DSはAliceが内部にもつデータベース(DS Manager)により管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 # Data Segment Manager
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 * DS の集合体であるデータベースを Alice では **DS Manager(DSM)** と呼ぶ。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 * DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 * keyに対して複数のDSを保存する際はFIFO的に処理される
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 ![opt](./images/KeyDS.svg){:width="50%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 # Data Segment Manager
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 * Local DSM … 各ノード固有のデータベース。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 * Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 ![opt](./images/remote_datasegment.svg){:width="50%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 # Data Segment API
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 * DS の追加
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 * put(String managerKey, String key, Object val)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 * update(String managerKey, String key, Object val) ※先頭DSを削除してからput
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 * DS の取得
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 * take(String managerKey, String key)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 * peek(String managerKey, String key) ※DSMから削除されない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 * take/peekは実際にはcreate()とsetKey()によって行われる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 * create()でDSの受け皿を作っておき、setKey()にkeyをセットすることで Input DS を指定する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 # Computation と Meta Computation
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 * Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 * Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 * 分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 # Computation と Meta Computation
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 * DS/CSの接続の間にMeta Computationが実行されている
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 * AliceのMeta ComputationもCS/DSにより実現される
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 * Meta ComputationはCS の処理を支えるMeta CSとMeta CSに管理されるMeta DSに分けられる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 ![opt](./pictures/MetaCSDS.svg){:width="70%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 # Computation と Meta Computation
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 * 分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 * プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 # TreeVNC
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 * Aliceを用いて実装する実用的な分散プログラムの例題
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 * 当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 * TightVNCがもとになっている
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 ![opt](./images/treeVNC.svg){:width="40%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 # AliceVNC
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 * 画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 ![opt](./images/AliceVNC.svg){:width="50%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 # TreeVNCで必要な機能
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 TreeVNCのComputation(VNCサーバからデータを受け取り表示)を支える機能をMeta Computationとして実装する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 * TreeTopologyの構成・管理(Topology Manager)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 * ノード間通信の切断時・再接続時の処理(ClosedEventManager)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 * ノードの接続状態確認(KeepAlive)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 * 子ノードへのデータの転送
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 * データの圧縮
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 # Dynamic Topology Manager
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 * Topology Managerを立ちあげ、各ノードはTopology Managerに参加表明をし接続すべきノードの情報を要求する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 ![opt](./pictures/tree1.svg){:width="60%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 # Dynamic Topology Manager
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 * Topology Managerは参加表明を受け取った順にTree構造になるよう接続情報を送る
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 ![opt](./pictures/tree2.svg){:width="60%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 # Dynamic Topology Manager
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 * 各ノードが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでTree構造が作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 ![opt](./pictures/tree3.svg){:width="60%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 # Meta Computationの追加
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 * TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 * 画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 * 再圧縮オーバーヘッドなしにゼロコピー転送する機能が必要
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 * 圧縮のMeta Computationと転送のMeta Computationを追加した
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 # 転送機能の追加
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 * AliceではInputDSをReceiverに受け取ったあと、Receiverから任意の型で取り出し、操作してOutputDSとして出力する(コピーする)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 * TreeVNCのように受け取ったデータをそのまま転送したいときには無駄
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 * Input DSをそのままOutput DSとしてコピーせず転送できる **flipメソッド** を追加。put/updateと同じように扱える。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 flip(String managerKey, String key, Receiver receiver)
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 # 圧縮表現(Meta DS)の追加
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 * DSを複数作るのではなく、1つのDSに対しMeta DSとして以下の表現を同時に持たせる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 <table style="border:none;">
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 <tr><td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 1. 一般的なJavaのオブジェクト<br>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125     LocalDSMにputしたときの形式 <br>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 2. MessagePackでシリアライズ化されたバイナリオブジェクト <br>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127     RemoteDSMにputしたときの形式 <br>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 3. 2をさらに圧縮したバイナリオブジェクト <br>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129     今回追加した形式 <br>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 </td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 <td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 <img src="./pictures/compressDS.svg" width="90%">
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 </td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 </table>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 # MessagePackとは
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 * Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 * シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 * JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 * AliceではJavaオブジェクトへの対応のためにJavassistも用いている。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 # 圧縮表現を扱うDSMとAPIの追加
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 * Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 * DSを圧縮したい場合は指定する DSM を Compressed DSM に変える
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 * 圧縮するコードとしないコードで変更が少ない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 put("Remote", "Key", val);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 put("compressedRemote", "Key", val);  
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 * NodeAでNodeBのcompressed RemoteDSM に対してDSをput
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 ![opt](./pictures/flow1.svg){:width="80%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 * DS が圧縮表現を持っていなければCompressed DSM内部で圧縮表現を生成してput
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 ![opt](./pictures/flow2.svg){:width="80%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 * RemoteDSMがAliceの送信パケットをNodeBのLocalDSMに送る
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 ![opt](./pictures/flow3.svg){:width="80%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 * NodeBのLocalDSMでは圧縮表現のみのDSとして保存する
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 ![opt](./pictures/flow4.svg){:width="80%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 * setKey()でtake/peekで呼ばれたらReceiverにDSが渡される
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 ![opt](./pictures/flow5.svg){:width="80%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 * castメソッドである **asClass()** が解凍・デシリアライズされた表現を作って渡す
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 ![opt](./pictures/flow6.svg){:width="80%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 # 圧縮表現がオンデマンドに作られる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 * DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のためにコピーや再圧縮をすることはない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 * 複数表現は必要最低限にしか作られない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 * 一つのKeyに対し様々な表現のDSが対応するが、asClass()によってユーザーは送られてくるDSの表現を気にせず扱える。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 # Meta Computationの評価
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 TreeVNCとAliceVNCを比較した
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 * 性能比較
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 各ノードへのメッセージの伝達速度を比較
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 同等の性能が実現できたか
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 * コード比較
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 コード量・コード複雑度を比較
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 シンプルな記述で仕様の変更が抑えられているか
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 # 性能比較 - 実験内容
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 * 木の段数ごとにメッセージの到達にどれぐらい時間がかかっているかを計測
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 * 講義内で学生に協力してもらい、最大 17 名の接続があった
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 ![](./pictures/delay.svg){:width="50%"}![](./pictures/delay2.svg){:width="50%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 # 性能比較 - 実験結果
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 * 3段目の計測結果
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 * 同じ傾向から同等の処理性能があることがわかった
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 <table style="border:none;">
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 <td><img src="./pictures/TreeVNC_depth3.svg" width="80%"></td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 <td><img src="./pictures/AliceVNC_compress_depth3.svg" width="80%"></td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 <td align="center">TreeVNC</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 <td align="center">AliceVNC</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 </table>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 # コード量比較
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 * TightVNCを含む全体の行数・単語数はAliceVNCのほうが少ない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 * コードの増加量ではTreeVNCに比べ75%仕様の変更が抑えられている
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 <table style="border-collapse: collapse;border:1px solid #000000;">
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">TightVNCからの変更行数</th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">19502</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">73646</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">7351</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC </td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14647</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">59217</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">1129</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 減少率 (%)</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">25</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">20</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">75</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 </table>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 # コード複雑度比較
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 * 循環的複雑度を用いる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 * 計測にはIntelliJのプラグイン「MetricsReloaded」を使用
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 <table style="border-collapse: collapse;border:1px solid #000000;">
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 平均値 </th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">最高値</th>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TightVNC </td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">13.63</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">97</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">15.33</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">141</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 <tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">10.95</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">99</td>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 </tr>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 </table>
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 * AliceVNCのほうがTreeVNCに比べ複雑度が低い
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 * TreeVNC で最も複雑度が高いTreeRFBProto.classはデータの待ち合わせ処理や通信処理が入り組んだ複雑なコード
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 * AliceVNCで最も複雑度が高いSwingViewerWindow.classは、TightVNCから変更がほとんどないため、AliceVNCの持っている複雑度はTightVNCが元来持っていた複雑度
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
273
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 # Meta Computationの評価結果
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 * AliceVNCはコードの修正量・複雑度共に低く抑えながらTreeVNC と同等の性能を持つ分散アプリケーションを記述する能力があった
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 # Aliceと他言語等との比較(1) - Erlang
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 * 共通点
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 * タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 * 共有メモリにアクセスするためのメモリロックの仕組みを必要としない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 * 相違点
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 * 複数のデータの待ち合わせ処理はユーザーが書く
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 * Topologyの構成等はユーザーが書く
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 # Aliceと他言語等との比較(2) - Akka
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 * 共通点
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 * tell/ask が Alice の put/take に対応
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 * 通信部分等を子アクターで分離し階層化
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 * 相違点
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 * データに名前がついていないので何が来るかわかりづらい
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 * Actorごとに受け取ったデータの判別処理をユーザーが書く
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 * Topologyの構成はユーザーが書かないといけない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 * 転送などのオーバーヘッドを考慮したメタプロトコル(Meta DS)が存在しない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 # まとめ
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 * Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせる圧縮機能やゼロコピー転送の機能を実装した。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 * TreeVNCをAlice上で実装し比較を行った結果、シンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 * AliceのMeta Computationが信頼性の高い実 用的な分散アプリケーションの構築に有用であることが確認された
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
301
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 # 今後の課題
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 * APIの再設計
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 * put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 * DSの型情報のマネジメント
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 * 型情報がないのでpeek/takeする際にわかりにくい
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 * セキュリティをサポートしていない
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 * 圧縮と同様の手法で暗号形式のデータ表現を扱えるように拡張可能
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
309
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 # 今後の課題
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 * TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 ![opt](./pictures/overNAT.svg){:width="60%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 # Dynamic Topology Manager
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 ![](./pictures/tree1.svg){:width="33%"}![](./pictures/tree2.svg){:width="33%"}![](./pictures/tree3.svg){:width="33%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 * RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す  
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 ![opt](./pictures/remoteTest.svg){:width="70%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 * RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 * CSはInputDSを持たないStartCSからはじまる
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 ![opt](./pictures/remoteTest2.svg){:width="70%"}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
326
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 # StartCodeSegmentの例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 public class RemoteStartCodeSegment extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
330
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 RemoteIncrement cs = new RemoteIncrement();//CSを生成
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 ods.put("local", "num", 0);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
336
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
339
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 # StartCodeSegmentの例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 public class RemoteStartCodeSegment extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 RemoteIncrement cs = new RemoteIncrement();
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 ods.put("local", "num", 0);//DSをLocalDSMにput
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
354 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 public class RemoteIncrement extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
356
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 public Receiver num = ids.create(CommandType.TAKE);//DSの受け皿を作る
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 public RemoteIncrement(){
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 num.setKey("remote", "num");
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 int n = num.asClass(Integer.class);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 if (n == 10) System.exit(0);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 RemoteIncrement cs = new RemoteIncrement();
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 ods.put("local", "num", ++n);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
370
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
373
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 public class RemoteIncrement extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
377
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 public Receiver num = ids.create(CommandType.TAKE);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 public RemoteIncrement(){
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 num.setKey("remote", "num");//CSにInputDSをセット。待ち合わせが発生。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 int n = num.asClass(Integer.class);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 if (n == 10) System.exit(0);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 RemoteIncrement cs = new RemoteIncrement();
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 ods.put("local", "num", ++n);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
391
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 public class RemoteIncrement extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 public Receiver num = ids.create(CommandType.TAKE);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
400
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 public RemoteIncrement(){
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 num.setKey("remote", "num");
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
404
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 int n = num.asClass(Integer.class);//InputDSをキャストして取得
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 if (n == 10) System.exit(0);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 RemoteIncrement cs = new RemoteIncrement();
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 ods.put("local", "num", ++n);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 public class RemoteIncrement extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
419
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 public Receiver num = ids.create(CommandType.TAKE);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
421
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 public RemoteIncrement(){
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 num.setKey("remote", "num");
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
425
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 int n = num.asClass(Integer.class);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 if (n == 10) System.exit(0);//num=10なら終了
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 RemoteIncrement cs = new RemoteIncrement();
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 ods.put("local", "num", ++n);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
433
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
435
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
437
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
438
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 public class RemoteIncrement extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 public Receiver num = ids.create(CommandType.TAKE);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 public RemoteIncrement(){
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 num.setKey("remote", "num");
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 int n = num.asClass(Integer.class);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 if (n == 10) System.exit(0);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 RemoteIncrement cs = new RemoteIncrement();//次のCSを生成
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 ods.put("local", "num", ++n);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
456
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 # CodeSegment の 例
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 ```java
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 public class RemoteIncrement extends CodeSegment {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
463
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 public Receiver num = ids.create(CommandType.TAKE);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
465
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 public RemoteIncrement(){
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 num.setKey("remote", "num");
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
468 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
469
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 @Override
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 public void run() {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 int n = num.asClass(Integer.class);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 if (n == 10) System.exit(0);
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 RemoteIncrement cs = new RemoteIncrement();
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 ods.put("local", "num", ++n);//インクリメントしたDSをput
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
477
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 ```
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
480
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
481
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 <style type="text/css">
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 <!--
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 *{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 font:nomal 100% 'PT Sans';
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
487
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 ul > li{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 list-style-type:disc;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
491
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 .slide h1{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 text-align:left;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 color:#777777;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 font:bold 40px/1.13 'PT Sans', sans-serif;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 margin-bottom: 50px;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
498
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
499 div#slide1 h1{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 text-align:left;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 color:#777777;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 font:bold 60px 'PT Sans', sans-serif;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 margin-bottom: 50px;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
505
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
506 pre > code{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 font-family:'Droid Sans Mono', 'Courier New', monospace;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
509
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 img[alt="opt"]{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 display: block;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 margin-left: auto;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 margin-right: auto;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
515
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
516 img[alt="right"]{
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 margin-right: 0;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 table {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 margin-left: auto;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 margin-right: auto;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
524
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 th {
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 font-size: 120%;
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 }
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 -->
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 </style>