Mercurial > hg > Papers > 2022 > riono-master
changeset 14:d76af2a472b9
update Christie chapter
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 27 Jan 2022 02:00:35 +0900 |
parents | e40d7a603b3f |
children | 7ca69f9daa18 |
files | Paper/chapter/1-Christie.tex Paper/images/LocalSequence.graffle Paper/images/LocalSequence.pdf Paper/images/RemotePutSequence.graffle Paper/images/RemotePutSequence.pdf Paper/images/RemoteTakeSequence.graffle Paper/images/RemoteTakeSequence.pdf Paper/master_paper.pdf Paper/src/StartCGExample.java |
diffstat | 9 files changed, 60 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/chapter/1-Christie.tex Wed Jan 26 23:07:23 2022 +0900 +++ b/Paper/chapter/1-Christie.tex Thu Jan 27 02:00:35 2022 +0900 @@ -151,7 +151,6 @@ \label{fig:LocalRemoteCommunication} \end{figure} -\newpage ソースコード\ref{src:2LocalDGM}はLocalDGMを2つ立ち上げ、お互いをremoteに見立てて通信する例である。 6行目にあるように、RemoteDGMを立ち上げるにはCGMが持つcreateRemoteDGMメソッドを用いる。 @@ -168,5 +167,59 @@ \section{通信フロー} +本章で説明したChristieの設計をいくつか例を挙げてChristieの通信のフローをシーケンス図を用いて解説する。 +図\ref{fig:LocalTakeSequence}はLocalDGMにTakeを行い、LocalDGM内にDGがあったときの処理の流れである。 + + +\begin{figure}[htb] + \begin{center} + \includegraphics[width=170mm]{images/LocalSequence.pdf} + \end{center} + \caption{LocalDGMにTakeした際のフロー} + \label{fig:LocalTakeSequence} +\end{figure} + + +プログラマはmainでCGMを生成する。CGMと同時にLocalDGMが作成される。 +続いてStartCG内でCGのインスタンスを作成し、setupメソッドが呼ばれると、DGに付与されたannotationからTakeコマンドが作られ実行される。 +CGは生成したコマンドの総数を初期値としたカウンタを持っており、コマンドが解決される(DGが揃う)度にカウンタは減少する。 +カウンタが0になると待ち合わせが完了したとなり、run内の処理がThreadPoolへ送られる。 + + +図\ref{fig:RemotePutSequence}は、LocalDGMにTakeを行うが、LocalDGM内にDGがなかったためにPutの待ち合わせを行うときの処理の流れである。 +mainなどの最初の処理は図\ref{fig:LocalTakeSequence}と同様のため省略する。 +\begin{figure}[htb] + \begin{center} + \includegraphics[width=170mm]{images/RemotePutSequence.pdf} + \end{center} + \caption{RemoteDGMからPutされた際のフロー} + \label{fig:RemotePutSequence} +\end{figure} + + +LocalまたはRemoteノードからPutコマンドが実行された際にwaitListを確認し、 +PutされたDGを待っているコマンドが存在すれば、そのコマンドは実行される。 + + +図\ref{fig:RemoteTakeSequence}はRemoteDGMにTakeを行った際の処理の流れである。 + + +\begin{figure}[htb] + \begin{center} + \includegraphics[width=170mm]{images/RemoteTakeSequence.pdf} + \end{center} + \caption{RemoteDGMにTakeした際のフロー} + \label{fig:RemoteTakeSequence} +\end{figure} + +プログラマはStartCGで事前にRemoteDGMを生成しておく。 +続いて、TakeFrom annotationからRemoteDGMに対するTakeコマンドが生成され実行される。 +TakeFromの様にRemoteからの応答を待つコマンドはLocalDGMではなく、RemoteDGMのwaitListに格納される。 +RemoteDGMに対するTakeコマンドはMessagePack形式に変換され、RemoteDGMが参照している別ノードのLocalDGMに送信される。 + +送信されたTakeコマンドを受け取ったLocalDGMは、要求されたDGがあればReplyコマンドを生成して送り返す。 +もしDGがなければ、Remoteから来たコマンドもLocalの場合と同様にLocalDGMのwaitListに格納される。 + +Replyコマンドを受け取るとRemoteDGMhはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。
--- a/Paper/src/StartCGExample.java Wed Jan 26 23:07:23 2022 +0900 +++ b/Paper/src/StartCGExample.java Thu Jan 27 02:00:35 2022 +0900 @@ -2,9 +2,13 @@ public StartCGExample(CodeGearManager cgm) { super(cgm); } public static void main(String args[]) { - CodeGearManager cgm = createCGM(10001); + StartCGExample start = StartCGExample(createCGM(10001)); + } + + @Override + protected void run(CodeGearManager cgm) { cgm.setup(new CodeGearExample()); CountObject count = new CountObject(1); - cgm.getLocalDGM().put("count", count); + put("count", count); } } \ No newline at end of file