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に入っていたコマンドを解決し、待ち合わせが完了する。
Binary file Paper/images/LocalSequence.graffle has changed
Binary file Paper/images/LocalSequence.pdf has changed
Binary file Paper/images/RemotePutSequence.graffle has changed
Binary file Paper/images/RemotePutSequence.pdf has changed
Binary file Paper/images/RemoteTakeSequence.graffle has changed
Binary file Paper/images/RemoteTakeSequence.pdf has changed
Binary file Paper/master_paper.pdf has changed
--- 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