comparison 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
comparison
equal deleted inserted replaced
43:34ac359f20f1 44:618adf0a9b2b
129 まずTestCodeSegmentというCodeSegmentのインスタンスcsを生成する. 129 まずTestCodeSegmentというCodeSegmentのインスタンスcsを生成する.
130 csはarg1というReceiverクラスのフィールドを保持しており, Receiverクラスは 130 csはarg1というReceiverクラスのフィールドを保持しており, Receiverクラスは
131 DataSegmentを受けとるためのクラスである. 131 DataSegmentを受けとるためのクラスである.
132 arg1に対しsetKey APIを使うことで, 使用したいDataSegmentのキー"count"を登録することができる. 132 arg1に対しsetKey APIを使うことで, 使用したいDataSegmentのキー"count"を登録することができる.
133 これによりキー"count"に対してデータが登録された場合, そのデータを受け取りcsの計算が自動で始まる. 133 これによりキー"count"に対してデータが登録された場合, そのデータを受け取りcsの計算が自動で始まる.
134 setKey APIの第一引数に渡している"local"はどのマシンのDataSegmentにアクセスするのかを指定している.
135 この場合は自分自身を表す"local"になる.
136
134 データの登録は\verb|ods.update|により行える. 137 データの登録は\verb|ods.update|により行える.
135 上記のコード20行目ではupdateにより"count"をキーとして数値の0を登録している. 138 上記のコード20行目ではupdateにより"count"をキーとして数値の0を登録している.
136 updateがされるとcsの計算が始まり別スレッドにより8行目からの処理が行われる. 139 updateがされるとcsの計算が始まり別スレッドにより8行目からの処理が行われる.
137 140
138 updateによりキー"count"に登録された数値0はReceiverであるdsを使って取ることができる. 141 updateによりキー"count"に登録された数値0はReceiverであるdsを使って取ることができる.
139 8行目から14行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし 142 8行目から14行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし出力する.
140 最後には\verb|ods.update|を行っている. 143 そして最後には\verb|ods.update|を行っている.
141 新たなTestCodeSegmentも生成しており, これはインクリメントされた"count"がupdateされることで実行される. 144 新たなTestCodeSegmentも生成しており, これはインクリメントされた"count"がupdateされることで実行される.
145 この一連の処理を"count"の数値が10以上になるまで行う.
146
147 \begin{figure}[htpb]
148 \begin{center}
149 \includegraphics[scale=0.70]{figures/testcodesegment.pdf}
150 \caption{DataSegmentとCodeSegmentによるプログラムの例}
151 \label{fig:testcodesegment}
152 \end{center}
153 \end{figure}
142 154
143 155
144 % Alice の他サーバノードへの"log"のputの問題 156 % Alice の他サーバノードへの"log"のputの問題
157
158 \subsection{他サーバノードのDataSegmentへアクセス}
159 Aliceにおける基本的なプログラミングは述べた.
160 次はネットワークを介して他サーバノードのDataSegmentにアクセスするプログラムについて述べる.
161
162 まず, Aliceにより2分木3ノードのトポロジーが形成された場合を想定する.
163 その時に実際に作られるトポロジーを図\ref{fig:remote_cs}に示す.
164 \begin{figure}[htpb]
165 \begin{center}
166 \includegraphics[scale=0.70]{figures/testcodesegment.pdf}
167 \caption{トポロジーの形成}
168 \label{fig:remote_cs}
169 \end{center}
170 \end{figure}
171 このトポロジー上で, 標準入力より入力されたメッセージを他サーバノードに送信
172 するプログラムを考える.
173
174 server node0, server node1, server node2 がそれぞれ接続しあっている.
175 矢印に付いている
176
177 \begin{lstlisting}[frame=lrbt,label=src:,caption=メッセージを受け取り他のサーバに流すCodeSegment,numbers=left]
178 public class SendMessageCodeSegment extends CodeSegment {
179
180 Receiver sendNodeList = ids.create(CommandType.PEEK);
181 public SendMessageCodeSegment() {
182 sendNodeList.setKey("_CLIST");
183 }
184 @Override
185 public void run() {
186 @SuppressWarnings("unchecked")
187 List<String> list = sendNodeList.asClass(List.class);
188 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
189 String message = null;
190 try {
191 System.out.println("Please enter your message");
192 while((message = reader.readLine()) != null ) {
193 for(String node : list) {
194 ods.put(node, "message", message);
195 System.out.println("send message to "+node);
196 }
197 } catch (IOException e) {
198 e.printStackTrace();
199 }
200 }
201 \end{lstlisting}
202
203 \begin{lstlisting}[frame=lrbt,label=src:,caption=,numbers=left]
204
205 \end{lstlisting}
206
207 \begin{lstlisting}[frame=lrbt,label=src:,caption=,numbers=left]
208
209 \end{lstlisting}
210
211
145 212
146 \section{ログのシリアライズ} 213 \section{ログのシリアライズ}
147 ここでログのシリアライズについて述べる. 214 ここでログのシリアライズについて述べる.
148 215
149 シリアライズとは, データをネットワーク上に流しても良い形式に変換することである. 216 シリアライズとは, データをネットワーク上に流しても良い形式に変換することである.