diff paper/chapter3.tex @ 44:618adf0a9b2b

Added some figures
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Thu, 30 Jan 2014 16:15:32 +0900
parents 34ac359f20f1
children cd3b8cf7a3a1
line wrap: on
line diff
--- a/paper/chapter3.tex	Wed Jan 29 21:11:36 2014 +0900
+++ b/paper/chapter3.tex	Thu Jan 30 16:15:32 2014 +0900
@@ -131,18 +131,85 @@
 DataSegmentを受けとるためのクラスである.
 arg1に対しsetKey APIを使うことで, 使用したいDataSegmentのキー"count"を登録することができる.
 これによりキー"count"に対してデータが登録された場合, そのデータを受け取りcsの計算が自動で始まる.
+setKey APIの第一引数に渡している"local"はどのマシンのDataSegmentにアクセスするのかを指定している.
+この場合は自分自身を表す"local"になる.
+
 データの登録は\verb|ods.update|により行える.
 上記のコード20行目ではupdateにより"count"をキーとして数値の0を登録している.
 updateがされるとcsの計算が始まり別スレッドにより8行目からの処理が行われる.
 
 updateによりキー"count"に登録された数値0はReceiverであるdsを使って取ることができる.
-8行目から14行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし
-最後には\verb|ods.update|を行っている.
+8行目から14行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし出力する.
+そして最後には\verb|ods.update|を行っている.
 新たなTestCodeSegmentも生成しており, これはインクリメントされた"count"がupdateされることで実行される.
+この一連の処理を"count"の数値が10以上になるまで行う.
+
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.70]{figures/testcodesegment.pdf}
+    \caption{DataSegmentとCodeSegmentによるプログラムの例}
+    \label{fig:testcodesegment}
+  \end{center}
+\end{figure}
 
 
 % Alice の他サーバノードへの"log"のputの問題
 
+\subsection{他サーバノードのDataSegmentへアクセス}
+Aliceにおける基本的なプログラミングは述べた.
+次はネットワークを介して他サーバノードのDataSegmentにアクセスするプログラムについて述べる.
+
+まず, Aliceにより2分木3ノードのトポロジーが形成された場合を想定する.
+その時に実際に作られるトポロジーを図\ref{fig:remote_cs}に示す.
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.70]{figures/testcodesegment.pdf}
+    \caption{トポロジーの形成}
+    \label{fig:remote_cs}
+  \end{center}
+\end{figure}
+このトポロジー上で, 標準入力より入力されたメッセージを他サーバノードに送信
+するプログラムを考える.
+
+server node0, server node1, server node2 がそれぞれ接続しあっている.
+矢印に付いている
+
+\begin{lstlisting}[frame=lrbt,label=src:,caption=メッセージを受け取り他のサーバに流すCodeSegment,numbers=left]
+public class SendMessageCodeSegment extends CodeSegment {
+
+  Receiver sendNodeList = ids.create(CommandType.PEEK);
+  public SendMessageCodeSegment() {
+    sendNodeList.setKey("_CLIST");
+  }
+  @Override
+  public void run() {
+    @SuppressWarnings("unchecked")
+    List<String> list = sendNodeList.asClass(List.class);
+    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+    String message = null;
+    try {
+      System.out.println("Please enter your message");
+      while((message = reader.readLine()) != null ) {
+        for(String node : list) {
+          ods.put(node, "message", message);
+          System.out.println("send message to "+node);
+      }
+    } catch (IOException e) {
+     e.printStackTrace();
+  }
+}
+\end{lstlisting}
+
+\begin{lstlisting}[frame=lrbt,label=src:,caption=,numbers=left]
+
+\end{lstlisting}
+
+\begin{lstlisting}[frame=lrbt,label=src:,caption=,numbers=left]
+
+\end{lstlisting}
+
+
+
 \section{ログのシリアライズ}
 ここでログのシリアライズについて述べる.