annotate Paper/chapter/1-Christie.tex @ 15:7ca69f9daa18

fix image
author riono <e165729@ie.u-ryukyu.ac.jp>
date Thu, 27 Jan 2022 18:33:23 +0900
parents d76af2a472b9
children d35c1ecaf666
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{Christie}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 ChristieとはJavaで記述された並列分散通信フレームワークである。Aliceという前身のプロジェクトが開発されていたが、以下のような問題があった。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 データを送受信するAPIはインスタンスを生成して関数を呼び出す様に設計されているが、外部Classからも関数が実行できてしまうため、
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 受信する際どのkeyに紐づいたデータを受け取るのか、直感的にわからない。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 データを管理しているlocalDataSegmentがシングルトンで設計されており、Localで接続を行う際に複数のアプリケーションで立ち上げる必要がある。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 データを受け取る際にObject型で受け取っているため、送信元を辿らない限り何の型が送信されているか不明瞭である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
10 それらの問題点を解消するためにAliceを再設計し、作成されたものがChristieである。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 ChristieではAliceの機能や概念を維持しつつ、Aliceで発生していた問題点やプログラムを煩雑さなどを解消している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \section{Christieの基礎概念}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 Chrisiteはタスクとデータを細かい単位に分割してそれぞれの依存関係を記述し、
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 タスク実行に必要な入力が揃った順から並列実行するというプログラミング手法を用いている。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 将来的に当研究室で開発しているGearsOSのファイルシステムに組み込まれる予定があるため、GearsOSを構成する言語 Continuation based Cと
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 似た概念を持っている。Christieに存在する概念として以下の様なものがある。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \begin{itemize}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \item CodeGear
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \item DataGear
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \item CodeGearManager (以下CGM)
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \item DataGearManager (以下DGM)
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \end{itemize}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
28 \begin{figure}[htb]
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
29 \begin{center}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
30 \includegraphics[width=150mm]{images/GearsRelationships.pdf}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
31 \end{center}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
32 \caption{各Gearの関係性}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
33 \label{fig:GearRelationships}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
34 \end{figure}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
35
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
36 図\ref{fig:GearRelationships}はそれぞれのGearの関係性を図示したものである。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 CodeGearはクラスやスレッドに相当する。
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
38 DataGearは変数データに相当し、CodeGear内でJavaのannotationの機能を用いてkeyに紐づいた変数データを取得できる。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 CodeGear内に記述した全てのDataGearにデータが格納された際に、初めてそのCodeGearが実行されるという仕組みになっている。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 CGMはノードに相当し、CodeGear、DataGear、DGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 DGMはDataGearを管理しており、putという操作によって変数データ、つまりDataGearをDGMに格納できる。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 DGMのput操作を行う際にはLocalとRemoteのどちらかを選び、変数のkeyとデータを引数として渡す。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 LocalであればLocalのCGMが管理しているDGMに対してDataGearを格納していく。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 Remoteであれば、接続したRemote先のCGMが管理しているDGMにDataGearを格納する。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \begin{figure}[htb]
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \begin{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \includegraphics[width=150mm]{images/ChristieClass.pdf}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \end{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \caption{同一プロセスでのChristieの複数インスタンス立ち上げ}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 \label{fig:MultiInstance}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 \end{figure}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 図\ref{fig:MultiInstance}は、Christieを同一プロセスで複数のインスタンスを生成した際のDGMやCGMの接続構造を示している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 全てのCGMはThreadPoolと他のCGMをListとして共有している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ThreadPoolとはCPUに合わせた並列度でqueueに入ったThreadを順次実行していく実行機構である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ThreadPoolが増えると、CPUコア数に合わない量のThreadを管理することになり並列度が下がるため、1つのThreadPoolで全てのCGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 またCGMのListを共有することでメタレベルで全てのCodeGear/DataGearにアクセス可能となっている。
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
60 CGを記述する際はCodeGear.classを継承する。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
61 CodeGearはRunnableインターフェースを持っており、runメソッド内に処理を記述することでマルチスレッドで処理が行われる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
62 CGに記述したkeyと一致するDGが全て揃った時、runに記述された処理が実行される。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
63 runメソッドの引数にCGMを指定しており、そのCGMを経由してChristieのAPIにアクセスする。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
64 GearsOSではCG間でContextを受け渡すことによってCGはDGにアクセスを行なっているため、Christieでもそのアクセス方法が採用されている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
65
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
66 通常のRunnableクラスでは引数を受け取ることができないが、
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
67 CodeGearExecutorというRunnableのMeta Computationを挟んだことでCGMを受け渡しながらの記述を可能にしている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
68
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
69 DGMに対してput操作を行うことでDGM内のqueueにDGを保管できる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
70 DGを取り出す際には、CG内で宣言した変数データにannotationを付ける。
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
71
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
72
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
73 \section{annotationを使用したデータの記述}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
74
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
75 ChristieではDGの指定にannotationを使用する。 annotationとはクラスやメソッド、パッケージに対して付加情報を記述できる
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
76 Java のMeta Computationである。先頭に@を付けることで記述でき、オリジナルのannotationを定義することもできる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
77 Christieのannotationには以下の4種類がある。
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
78
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
79 \begin{description}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
80 \item[Take] 先頭のDGを読み込み、そのDGを削除する。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
81 \item[Peek] 先頭のDGを読み込むが、DGは削除されない。そのため、特に操作をしない場合には同じDGを参照し続ける。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
82 \item[TakeFrom(Remote DGM name)] Takeと処理動作は同じであるが、Remote DGM nameを指定することで、その接続先(Remote)のDGMからTake操作を行うことができる。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
83 \item[PeekFrom(Remote DGM name)] Peekと処理動作は同じであるが、 Remote DGM nameを指定することで、その接続先(Remote)のDGMからPeek操作を行うことができる。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
84 \end{description}
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
85
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
87 DGの宣言には型と変数を直接宣言し、変数名としてkeyを記述する。 そして、その宣言の上にannotationでTakeまたはPeekを指定する(ソースコード\ref{src:TakeExample})。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
90 \lstinputlisting[label=src:TakeExample, caption=Takeの例]{src/Take.java}
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
92 annotationで指定したDGはCGを生成した際にCodeGear.class内で待ち合わせの処理が行われる。
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
93 これにはJavaのreflectionAPIを利用しており、annotationと同時に変数名も取得できるため、面数名によるkeyの指定が可能になっている。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
95 Christieのannotationはフィールドに対してのみ記述可能であるため、keyの指定とTake/Peekの指定を必ず一箇所で書くことが明確に決まっている。
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
96 これより、Aliceの様に外のCGからkeyやデータへの干渉をされることがない。
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
97 さらにkeyを変数名にしたことで、動的なkeyの指定やkeyと変数名の不一致による可読性の低下を防ぐことが可能となった。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
99 リモートノードに対してTake/Peekをする際には、TakeFrom/PeekFrom annotationを用いる(ソースコード\ref{src:TakeFromExample})。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
101 \lstinputlisting[label=src:TakeFromExample, caption=TakeFromの例]{src/TakeFrom.java}
12
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
102
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
103
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
104 \section{データの型整合性}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
105 Aliceでは送受信するデータはReceive型という専用の型を使用していた。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
106 内部のデータ自体はobject型だったため、元データの型を知るためには送信元を確認する必要があった。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
107 ChristieではannotationでDGの宣言を行っているため、直接変数の型を宣言することが可能となっている。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
108 ソースコード\ref{src:InputDGExample}はDGのデータを扱う例である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
109
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
110 \lstinputlisting[label=src:InputDGExample, caption=DGのデータを扱う例]{src/InputDG.java}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
111
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
112 DGとして宣言した変数の型は、JavaのreflectionAPIを用いてCGMで保存され、LocalやRemoteノードと通信する際に適切な変換が行われれる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
113 この様にプログラマが指定せずとも正しい型でデータを取得できるため、プログラマの負担を減らし信頼性を保証することができる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
114
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
115 \newpage
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
116
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
117 \section{CodeGearの記述方法}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
118 以下のソースコード\ref{src:StartCGExample}、\ref{src:CGExample}、\ref{src:CounteObj}はLocalDGMにputしたDGを取り出して表示し、
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
119 インクリメントして10回繰り返す例題である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
120
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
121 \lstinputlisting[label=src:StartCGExample, caption=StartCodeGearの記述例]{src/StartCGExample.java}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
122 \lstinputlisting[label=src:CGExample, caption=CodeGearの記述例]{src/CodeGearExample.java}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
123 \lstinputlisting[label=src:CounteObj, caption=DGとして送信されるオブジェクトのクラス]{src/CountObject.java}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
124
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
125 Chrisiteでは、StartCodeGear(以下StartCG)から処理を開始する。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
126 StartCGはStartCodeGear.javaを継承することで記述可能である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
127
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
128 StartCGを記述する際には、createCGMメソッドによりCGMを生成する必要がある(ソースコード\ref{src:StartCGExample} 5行目)。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
129 createCGMの引数にはremoteノードとソケット通信をする際に使用するポート番号を指定する。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
130 CGMを生成した際にLocalDGMやremoteと通信を行うためのDaemonも生成される。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
131
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
132
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
133 CGに対してannotationから待ち合わせを実行する処理はsetupメソッドが行う。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
134 そのためソースコード\ref{src:StartCGExample}の6行目、ソースコード\ref{src:CGExample}の10行目のように、
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
135 CGのインスタンスをCGMのsetupメソッドに渡す必要がある。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
136 そのためどこでもCGの待ち合わせを行うことができず、必ずCGMの生成を行う必要がある。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
137 その制約により、複雑になりがちな分散プログラミングのコードの可読性を高めている。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
138 実行されたCGを再度実行する場合にも、CGのインスタンスを生成してsetupメソッドに渡す。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
139
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
140
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
141 \section{DataGearManagerの複数立ち上げ}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
142 AliceではLocalDGMと同じ機能のLocalDataSegmentManagaer(以下LocalDSM)がstaticで実装されていたため、複数のLocalDSMを立ち上げることができなかった。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
143 しかしChristieではCGMの生成に伴いLocalDGMも生成されるため、複数作成が可能である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
144 複数のLocalDGM同士のやり取りも、Remoteへの接続と同じ様に相手をRemoteDGMとしてproxyとして立ち上げることでアクセス可能である(図\ref{fig:LocalRemoteCommunication})。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
145
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
146 \begin{figure}[htb]
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
147 \begin{center}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
148 \includegraphics[width=150mm]{images/LocalRemoteCommunication.pdf}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
149 \end{center}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
150 \caption{RemoteDGMを介したCGM間の通信}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
151 \label{fig:LocalRemoteCommunication}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
152 \end{figure}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
153
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
154
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
155 ソースコード\ref{src:2LocalDGM}はLocalDGMを2つ立ち上げ、お互いをremoteに見立てて通信する例である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
156 6行目にあるように、RemoteDGMを立ち上げるにはCGMが持つcreateRemoteDGMメソッドを用いる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
157 引数にはRemoteDGM名と接続するremoteノードhost名、ポート番号を指定している。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
158
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
159 \lstinputlisting[label=src:2LocalDGM, caption=LocalDGMを2つ作る例]{src/RemoteDGMCommunication.java}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
160
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
161 remoteへの接続と同じ様にアクセスが可能になっており、コードを変更せずに同一マシン上の1つのアプリケーション内で分散アプリケーションのテストが可能となっている。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
162
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
163
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
164 また、CGMは内部に同一プロセス全てのCGMリストをstaticで持っており、複数生成したCGMを全て管理している。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
165 つまり、メタレベルではRemoteDGMを介さずに各LocalDGMに相互アクセス可能である。
12
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
166
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
167 \newpage
12
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
168
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
169 \section{通信フロー}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
170 本章で説明したChristieの設計をいくつか例を挙げてChristieの通信のフローをシーケンス図を用いて解説する。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
171 図\ref{fig:LocalTakeSequence}はLocalDGMにTakeを行い、LocalDGM内にDGがあったときの処理の流れである。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
172
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
173
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
174 \begin{figure}[htb]
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
175 \begin{center}
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
176 \includegraphics[width=160mm]{images/LocalSequence.pdf}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
177 \end{center}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
178 \caption{LocalDGMにTakeした際のフロー}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
179 \label{fig:LocalTakeSequence}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
180 \end{figure}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
181
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
182
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
183 プログラマはmainでCGMを生成する。CGMと同時にLocalDGMが作成される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
184 続いてStartCG内でCGのインスタンスを作成し、setupメソッドが呼ばれると、DGに付与されたannotationからTakeコマンドが作られ実行される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
185 CGは生成したコマンドの総数を初期値としたカウンタを持っており、コマンドが解決される(DGが揃う)度にカウンタは減少する。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
186 カウンタが0になると待ち合わせが完了したとなり、run内の処理がThreadPoolへ送られる。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
187
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
188
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
189 図\ref{fig:RemotePutSequence}は、LocalDGMにTakeを行うが、LocalDGM内にDGがなかったためにPutの待ち合わせを行うときの処理の流れである。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
190 mainなどの最初の処理は図\ref{fig:LocalTakeSequence}と同様のため省略する。
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
191
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
192
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
193 \begin{figure}[htb]
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
194 \begin{center}
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
195 \includegraphics[width=160mm]{images/RemotePutSequence.pdf}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
196 \end{center}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
197 \caption{RemoteDGMからPutされた際のフロー}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
198 \label{fig:RemotePutSequence}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
199 \end{figure}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
200
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
201
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
202 LocalまたはRemoteノードからPutコマンドが実行された際にwaitListを確認し、
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
203 PutされたDGを待っているコマンドが存在すれば、そのコマンドは実行される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
204
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
205
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
206 図\ref{fig:RemoteTakeSequence}はRemoteDGMにTakeを行った際の処理の流れである。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
207
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
208
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
209 \begin{figure}[htb]
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
210 \begin{center}
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
211 \includegraphics[width=160mm]{images/RemoteTakeSequence.pdf}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
212 \end{center}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
213 \caption{RemoteDGMにTakeした際のフロー}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
214 \label{fig:RemoteTakeSequence}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
215 \end{figure}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
216
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
217 プログラマはStartCGで事前にRemoteDGMを生成しておく。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
218 続いて、TakeFrom annotationからRemoteDGMに対するTakeコマンドが生成され実行される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
219 TakeFromの様にRemoteからの応答を待つコマンドはLocalDGMではなく、RemoteDGMのwaitListに格納される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
220 RemoteDGMに対するTakeコマンドはMessagePack形式に変換され、RemoteDGMが参照している別ノードのLocalDGMに送信される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
221
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
222 送信されたTakeコマンドを受け取ったLocalDGMは、要求されたDGがあればReplyコマンドを生成して送り返す。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
223 もしDGがなければ、Remoteから来たコマンドもLocalの場合と同様にLocalDGMのwaitListに格納される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
224
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
225 Replyコマンドを受け取るとRemoteDGMhはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
226
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
227
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
228
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
229