Mercurial > hg > Papers > 2014 > nobuyasu-master
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{ログのシリアライズ} ここでログのシリアライズについて述べる.