# HG changeset patch # User riono # Date 1643216435 -32400 # Node ID d76af2a472b946aae344be8676fe06ae4a69147b # Parent e40d7a603b3f259b83293357550acadbb58dd0fa update Christie chapter diff -r e40d7a603b3f -r d76af2a472b9 Paper/chapter/1-Christie.tex --- 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に入っていたコマンドを解決し、待ち合わせが完了する。 diff -r e40d7a603b3f -r d76af2a472b9 Paper/images/LocalSequence.graffle Binary file Paper/images/LocalSequence.graffle has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/images/LocalSequence.pdf Binary file Paper/images/LocalSequence.pdf has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/images/RemotePutSequence.graffle Binary file Paper/images/RemotePutSequence.graffle has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/images/RemotePutSequence.pdf Binary file Paper/images/RemotePutSequence.pdf has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/images/RemoteTakeSequence.graffle Binary file Paper/images/RemoteTakeSequence.graffle has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/images/RemoteTakeSequence.pdf Binary file Paper/images/RemoteTakeSequence.pdf has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/master_paper.pdf Binary file Paper/master_paper.pdf has changed diff -r e40d7a603b3f -r d76af2a472b9 Paper/src/StartCGExample.java --- 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