Mercurial > hg > Papers > 2014 > nobuyasu-master
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 シリアライズとは, データをネットワーク上に流しても良い形式に変換することである. |