Mercurial > hg > Papers > 2022 > riono-master
diff Paper/chapter/1-Christie.tex @ 13:e40d7a603b3f
update Christie chapter
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 26 Jan 2022 23:07:23 +0900 |
parents | 6116a8fe4a53 |
children | d76af2a472b9 |
line wrap: on
line diff
--- a/Paper/chapter/1-Christie.tex Sun Jan 09 22:45:03 2022 +0900 +++ b/Paper/chapter/1-Christie.tex Wed Jan 26 23:07:23 2022 +0900 @@ -7,7 +7,7 @@ データを受け取る際にObject型で受け取っているため、送信元を辿らない限り何の型が送信されているか不明瞭である。 -それらの問題点を解消するためにAliceを再設計され、作成されたものがChristieである。 +それらの問題点を解消するためにAliceを再設計し、作成されたものがChristieである。 ChristieではAliceの機能や概念を維持しつつ、Aliceで発生していた問題点やプログラムを煩雑さなどを解消している。 @@ -66,10 +66,15 @@ 通常のRunnableクラスでは引数を受け取ることができないが、 CodeGearExecutorというRunnableのMeta Computationを挟んだことでCGMを受け渡しながらの記述を可能にしている。 - DGMに対してput操作を行うことでDGM内のqueueにDGを保管できる。 DGを取り出す際には、CG内で宣言した変数データにannotationを付ける。 -DGのannotationには以下の4種類がある。 + + +\section{annotationを使用したデータの記述} + +ChristieではDGの指定にannotationを使用する。 annotationとはクラスやメソッド、パッケージに対して付加情報を記述できる +Java のMeta Computationである。先頭に@を付けることで記述でき、オリジナルのannotationを定義することもできる。 +Christieのannotationには以下の4種類がある。 \begin{description} \item[Take] 先頭のDGを読み込み、そのDGを削除する。 @@ -78,10 +83,7 @@ \item[PeekFrom(Remote DGM name)] Peekと処理動作は同じであるが、 Remote DGM nameを指定することで、その接続先(Remote)のDGMからPeek操作を行うことができる。 \end{description} -\section{annotationを使用したデータの記述} -ChristieではDGの指定にannotationを使用する。 annotationとはクラスやメソッド、パッケージに対して付加情報を記述できる -Java のMeta Computationである。先頭に@を付けることで記述でき、オリジナルのアノテーションを定義することもできる。 DGの宣言には型と変数を直接宣言し、変数名としてkeyを記述する。 そして、その宣言の上にannotationでTakeまたはPeekを指定する(ソースコード\ref{src:TakeExample})。 @@ -99,6 +101,72 @@ \lstinputlisting[label=src:TakeFromExample, caption=TakeFromの例]{src/TakeFrom.java} +\section{データの型整合性} +Aliceでは送受信するデータはReceive型という専用の型を使用していた。 +内部のデータ自体はobject型だったため、元データの型を知るためには送信元を確認する必要があった。 +ChristieではannotationでDGの宣言を行っているため、直接変数の型を宣言することが可能となっている。 +ソースコード\ref{src:InputDGExample}はDGのデータを扱う例である。 + +\lstinputlisting[label=src:InputDGExample, caption=DGのデータを扱う例]{src/InputDG.java} + +DGとして宣言した変数の型は、JavaのreflectionAPIを用いてCGMで保存され、LocalやRemoteノードと通信する際に適切な変換が行われれる。 +この様にプログラマが指定せずとも正しい型でデータを取得できるため、プログラマの負担を減らし信頼性を保証することができる。 + +\newpage + +\section{CodeGearの記述方法} +以下のソースコード\ref{src:StartCGExample}、\ref{src:CGExample}、\ref{src:CounteObj}はLocalDGMにputしたDGを取り出して表示し、 +インクリメントして10回繰り返す例題である。 + +\lstinputlisting[label=src:StartCGExample, caption=StartCodeGearの記述例]{src/StartCGExample.java} +\lstinputlisting[label=src:CGExample, caption=CodeGearの記述例]{src/CodeGearExample.java} +\lstinputlisting[label=src:CounteObj, caption=DGとして送信されるオブジェクトのクラス]{src/CountObject.java} + +Chrisiteでは、StartCodeGear(以下StartCG)から処理を開始する。 +StartCGはStartCodeGear.javaを継承することで記述可能である。 + +StartCGを記述する際には、createCGMメソッドによりCGMを生成する必要がある(ソースコード\ref{src:StartCGExample} 5行目)。 +createCGMの引数にはremoteノードとソケット通信をする際に使用するポート番号を指定する。 +CGMを生成した際にLocalDGMやremoteと通信を行うためのDaemonも生成される。 + + +CGに対してannotationから待ち合わせを実行する処理はsetupメソッドが行う。 +そのためソースコード\ref{src:StartCGExample}の6行目、ソースコード\ref{src:CGExample}の10行目のように、 +CGのインスタンスをCGMのsetupメソッドに渡す必要がある。 +そのためどこでもCGの待ち合わせを行うことができず、必ずCGMの生成を行う必要がある。 +その制約により、複雑になりがちな分散プログラミングのコードの可読性を高めている。 +実行されたCGを再度実行する場合にも、CGのインスタンスを生成してsetupメソッドに渡す。 + + +\section{DataGearManagerの複数立ち上げ} +AliceではLocalDGMと同じ機能のLocalDataSegmentManagaer(以下LocalDSM)がstaticで実装されていたため、複数のLocalDSMを立ち上げることができなかった。 +しかしChristieではCGMの生成に伴いLocalDGMも生成されるため、複数作成が可能である。 +複数のLocalDGM同士のやり取りも、Remoteへの接続と同じ様に相手をRemoteDGMとしてproxyとして立ち上げることでアクセス可能である(図\ref{fig:LocalRemoteCommunication})。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[width=150mm]{images/LocalRemoteCommunication.pdf} + \end{center} + \caption{RemoteDGMを介したCGM間の通信} + \label{fig:LocalRemoteCommunication} +\end{figure} + +\newpage + +ソースコード\ref{src:2LocalDGM}はLocalDGMを2つ立ち上げ、お互いをremoteに見立てて通信する例である。 +6行目にあるように、RemoteDGMを立ち上げるにはCGMが持つcreateRemoteDGMメソッドを用いる。 +引数にはRemoteDGM名と接続するremoteノードhost名、ポート番号を指定している。 + +\lstinputlisting[label=src:2LocalDGM, caption=LocalDGMを2つ作る例]{src/RemoteDGMCommunication.java} + +remoteへの接続と同じ様にアクセスが可能になっており、コードを変更せずに同一マシン上の1つのアプリケーション内で分散アプリケーションのテストが可能となっている。 + + +また、CGMは内部に同一プロセス全てのCGMリストをstaticで持っており、複数生成したCGMを全て管理している。 +つまり、メタレベルではRemoteDGMを介さずに各LocalDGMに相互アクセス可能である。 +\section{通信フロー} + +