Mercurial > hg > Papers > 2016 > nozomi-thesis
diff presen/sample.html @ 10:90aaf305aed6 default tip
add presen
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 18 Feb 2016 09:06:13 +0900 |
parents | edc72425caab |
children |
line wrap: on
line diff
--- a/presen/sample.html Wed Feb 17 20:35:54 2016 +0900 +++ b/presen/sample.html Thu Feb 18 09:06:13 2016 +0900 @@ -2,10 +2,10 @@ <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> - <title>分散フレームワークAliceのPC画面配信システムへの応用</title> + <title>分散フレームワークAliceのMeta Data Segment</title> <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]"> -<meta name="author" content="照屋のぞみ 河野真治" > +<meta name="author" content="照屋のぞみ" > <!-- style sheet links --> <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> @@ -67,15 +67,15 @@ <tr> <td> <div align="center"> - <h1><font color="#808db5">分散フレームワークAliceのPC画面配信システムへの応用</font></h1> + <h1><font color="#808db5">分散フレームワークAliceのMeta Data Segment</font></h1> </div> </td> </tr> <tr> <td> <div align="left"> - 照屋のぞみ 河野真治 - 琉球大学 工学部 情報工学科 + 照屋のぞみ + 琉球大学 工学部 情報工学科 河野研 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> </td> @@ -87,16 +87,16 @@ <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] - on 2016-01-09 09:23:18 +0900 with Markdown engine kramdown (1.5.0) + on 2016-02-18 09:05:23 +0900 with Markdown engine kramdown (1.5.0) using options {} --> <!-- _S9SLIDE_ --> <h1 id="section">研究目的(1/3)</h1> <ul> - <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> - <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。 </li> - <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li> + <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する</li> + <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す</li> + <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している</li> </ul> @@ -105,10 +105,9 @@ <!-- _S9SLIDE_ --> <h1 id="section-1">研究目的(2/3)</h1> <ul> - <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li> + <li>Aliceでは、ComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li> <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li> - <li>仕様を大きく変更することなくプログラムの挙動が変えられる</li> - <li>変更前の信頼性を保ったまま拡張可能にする</li> + <li>コードの変更を抑え、変更前の信頼性を保ったまま拡張可能にする</li> </ul> @@ -117,9 +116,9 @@ <!-- _S9SLIDE_ --> <h1 id="section-2">研究目的(3/3)</h1> <ul> - <li>本研究では、 Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する。</li> - <li>構築するにあたり必要となった機能を洗い出しAliceのMeta Computationとして実装した。</li> - <li>もとのTreeVNCとの比較を行うことでMetaComputationの役割と有効性を示す。</li> + <li>本研究では、Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する</li> + <li>構築するにあたり必要となった圧縮機能をAliceのMeta Computationとして実装した</li> + <li>もとのTreeVNCとの比較を行うことでMeta Computationの役割と有効性を示す</li> </ul> @@ -130,8 +129,8 @@ <ul> <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li> <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li> - <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 -<img src="./images/dsandcs.svg" alt="opt" width="60%" /></li> + <li>CSはkeyで指定されたDSが全て揃うと実行されるという性質を持つ。 +<img src="./images/dsandcs.svg" alt="opt" width="50%" /></li> </ul> @@ -150,56 +149,16 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="data-segment--codesegment">Data Segment と CodeSegment</h1> -<ul> - <li>AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する</li> - <li>ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。</li> - <li>DSはAliceが内部にもつデータベース(DS Manager)により管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> <h1 id="data-segment-manager">Data Segment Manager</h1> <ul> - <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。 </li> - <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li> - <li>keyに対して複数のDSを保存する際はFIFO的に処理される<br /> -<img src="./images/KeyDS.svg" alt="opt" width="50%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="data-segment-manager-1">Data Segment Manager</h1> -<ul> - <li>Local DSM … 各ノード固有のデータベース。</li> - <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br /> -<img src="./images/remote_datasegment.svg" alt="opt" width="50%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="data-segment-api">Data Segment API</h1> -<ul> - <li>DS の追加<br /> + <li>DS の集合体であるデータベースを <strong>DS Manager(DSM)</strong> と呼ぶ。<br /> <ul> - <li>put(String managerKey, String key, Object val) </li> - <li>update(String managerKey, String key, Object val) ※先頭DSを削除してからput</li> + <li>Local DSM … 各ノード固有のデータベース。</li> + <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。 </li> </ul> </li> - <li>DS の取得<br /> - <ul> - <li>take(String managerKey, String key) </li> - <li>peek(String managerKey, String key) ※DSMから削除されない</li> - </ul> - </li> - <li>take/peekは実際にはcreate()とsetKey()によって行われる</li> - <li>create()でDSの受け皿を作っておき、setKey()にkeyをセットすることで Input DS を指定する</li> + <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。 +<img src="./images/remote_datasegment.svg" alt="opt" width="50%" /></li> </ul> @@ -209,8 +168,8 @@ <h1 id="computation--meta-computation">Computation と Meta Computation</h1> <ul> <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li> - <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li> - <li>分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。</li> + <li>分散トポロジーの構成、通信の切断・再接続時の処理などはMeta ComputationとしてAliceが提供</li> + <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定することでシンプルな記述を実現</li> </ul> @@ -229,32 +188,11 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="computation--meta-computation-2">Computation と Meta Computation</h1> -<ul> - <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li> - <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="treevnc">TreeVNC</h1> +<h1 id="treevnc">TreeVNCへの応用</h1> <ul> - <li>Aliceを用いて実装する実用的な分散プログラムの例題</li> - <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム </li> - <li>TightVNCがもとになっている<br /> -<img src="./images/treeVNC.svg" alt="opt" width="40%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="alicevnc">AliceVNC</h1> -<ul> - <li>画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能 -<img src="./images/AliceVNC.svg" alt="opt" width="50%" /></li> + <li>AliceのMeta Computationの有効性を示すため実用的な例題であるTreeVNCを実装する</li> + <li>TightVNCをもとにした木構造画面配信システム</li> + <li>画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能</li> </ul> @@ -268,7 +206,7 @@ <li>TreeTopologyの構成・管理(Topology Manager)</li> <li>ノード間通信の切断時・再接続時の処理(ClosedEventManager)</li> <li>ノードの接続状態確認(KeepAlive)</li> - <li>子ノードへのデータの転送</li> + <li>子ノードへのデータの転送(flip)</li> <li>データの圧縮</li> </ul> @@ -276,41 +214,11 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="dynamic-topology-manager">Dynamic Topology Manager</h1> -<ul> - <li>Topology Managerを立ちあげ、各ノードはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br /> -<img src="./pictures/tree1.svg" alt="opt" width="60%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="dynamic-topology-manager-1">Dynamic Topology Manager</h1> -<ul> - <li>Topology Managerは参加表明を受け取った順にTree構造になるよう接続情報を送る<br /> -<img src="./pictures/tree2.svg" alt="opt" width="60%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="dynamic-topology-manager-2">Dynamic Topology Manager</h1> -<ul> - <li>各ノードが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでTree構造が作られる<br /> -<img src="./pictures/tree3.svg" alt="opt" width="60%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> <h1 id="meta-computation">Meta Computationの追加</h1> <ul> <li>TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している</li> <li>画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送</li> - <li>再圧縮オーバーヘッドなしにゼロコピー転送する機能が必要</li> + <li>圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮 するオーバーヘッドを無くすことができる</li> <li>圧縮のMeta Computationと転送のMeta Computationを追加した</li> </ul> @@ -318,34 +226,24 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-3">転送機能の追加</h1> -<ul> - <li>AliceではInputDSをReceiverに受け取ったあと、Receiverから任意の型で取り出し、操作してOutputDSとして出力する(コピーする)</li> - <li>TreeVNCのように受け取ったデータをそのまま転送したいときには無駄</li> - <li>Input DSをそのままOutput DSとしてコピーせず転送できる <strong>flipメソッド</strong> を追加。put/updateと同じように扱える。<br /> - flip(String managerKey, String key, Receiver receiver)</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> <h1 id="meta-ds">圧縮表現(Meta DS)の追加</h1> <ul> <li>DSを複数作るのではなく、1つのDSに対しMeta DSとして以下の表現を同時に持たせる</li> </ul> <table style="border:none;"> -<tr><td> +<tr><td width="550px"> 1. 一般的なJavaのオブジェクト<br /> - LocalDSMにputしたときの形式 <br /> -2. MessagePackでシリアライズ化されたバイナリオブジェクト <br /> - RemoteDSMにputしたときの形式 <br /> -3. 2をさらに圧縮したバイナリオブジェクト <br /> - 今回追加した形式 <br /> + LocalDSMにputしたときの形式 <br /> +<br /> +2. シリアライズ化されたバイナリオブジェクト <br /> + RemoteDSMにputしたときの形式 <br /> +<br /> +3. 2を圧縮したバイナリオブジェクト <br /> + 今回追加した形式 <br /> </td> -<td> -<img src="./pictures/compressDS.svg" width="90%" /> +<td width="500px"> +<img src="./pictures/compressDS.svg" width="100%" /> </td> </tr> </table> @@ -354,18 +252,6 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="messagepack">MessagePackとは</h1> -<ul> - <li>Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。</li> - <li>シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。</li> - <li>JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。</li> - <li>AliceではJavaオブジェクトへの対応のためにJavassistも用いている。</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> <h1 id="dsmapi">圧縮表現を扱うDSMとAPIの追加</h1> <ul lang="java"> <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加</li> @@ -380,71 +266,11 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-4">圧縮表現がオンデマンドに作られる</h1> -<ul> - <li>NodeAでNodeBのcompressed RemoteDSM に対してDSをput<br /> -<img src="./pictures/flow1.svg" alt="opt" width="80%" /> </li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-5">圧縮表現がオンデマンドに作られる</h1> -<ul> - <li>DS が圧縮表現を持っていなければCompressed DSM内部で圧縮表現を生成してput -<img src="./pictures/flow2.svg" alt="opt" width="80%" /> </li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-6">圧縮表現がオンデマンドに作られる</h1> -<ul> - <li>RemoteDSMがAliceの送信パケットをNodeBのLocalDSMに送る<br /> -<img src="./pictures/flow3.svg" alt="opt" width="80%" /> </li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-7">圧縮表現がオンデマンドに作られる</h1> -<ul> - <li>NodeBのLocalDSMでは圧縮表現のみのDSとして保存する<br /> -<img src="./pictures/flow4.svg" alt="opt" width="80%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-8">圧縮表現がオンデマンドに作られる</h1> -<ul> - <li>setKey()でtake/peekで呼ばれたらReceiverにDSが渡される<br /> -<img src="./pictures/flow5.svg" alt="opt" width="80%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-9">圧縮表現がオンデマンドに作られる</h1> -<ul> - <li>castメソッドである <strong>asClass()</strong> が解凍・デシリアライズされた表現を作って渡す<br /> -<img src="./pictures/flow6.svg" alt="opt" width="80%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-10">圧縮表現がオンデマンドに作られる</h1> +<h1 id="section-3">圧縮表現がオンデマンドに作られる</h1> <ul> <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のためにコピーや再圧縮をすることはない。</li> <li>複数表現は必要最低限にしか作られない。</li> - <li>一つのKeyに対し様々な表現のDSが対応するが、asClass()によってユーザーは送られてくるDSの表現を気にせず扱える。 </li> + <li>一つのKeyに対し様々な表現のDSが対応するが、キャストメソッドであるasClass()によってユーザーは送られてくるDSの表現を気にせず任意の型で取り出せる。 </li> </ul> @@ -467,18 +293,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-11">性能比較 - 実験内容</h1> -<ul> - <li>木の段数ごとにメッセージの到達にどれぐらい時間がかかっているかを計測</li> - <li>講義内で学生に協力してもらい、最大 17 名の接続があった<br /> -<img src="./pictures/delay.svg" alt="" width="50%" /><img src="./pictures/delay2.svg" alt="" width="50%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-12">性能比較 - 実験結果</h1> +<h1 id="section-4">性能比較 - 実験結果</h1> <ul> <li>3段目の計測結果</li> <li>同じ傾向から同等の処理性能があることがわかった </li> @@ -499,7 +314,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-13">コード量比較</h1> +<h1 id="section-5">コード量比較</h1> <ul> <li>TightVNCを含む全体の行数・単語数はAliceVNCのほうが少ない</li> <li>コードの増加量ではTreeVNCに比べ75%仕様の変更が抑えられている </li> @@ -534,11 +349,10 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-14">コード複雑度比較</h1> +<h1 id="section-6">コード複雑度比較</h1> <ul> <li>循環的複雑度を用いる<br /> コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。</li> - <li>計測にはIntelliJのプラグイン「MetricsReloaded」を使用</li> </ul> <table style="border-collapse: collapse;border:1px solid #000000;"> @@ -572,69 +386,28 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="meta-computation-2">Meta Computationの評価結果</h1> -<ul> - <li>AliceVNCはコードの修正量・複雑度共に低く抑えながらTreeVNC と同等の性能を持つ分散アプリケーションを記述する能力があった</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1> +<h1 id="section-7">まとめ</h1> <ul> - <li>共通点 - <ul> - <li>タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割</li> - <li>共有メモリにアクセスするためのメモリロックの仕組みを必要としない</li> - </ul> - </li> - <li>相違点 - <ul> - <li>複数のデータの待ち合わせ処理はユーザーが書く</li> - <li>Topologyの構成等はユーザーが書く</li> - </ul> - </li> + <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、Meta Data Segmentに複数の表現のデータを同時に持たせることで圧縮機能を実装した。同様の手法を用いれば暗号表現などへの対応もでき自由度の高い通信を行うことが可能になる。</li> + <li>TreeVNCをAlice上で実装し比較を行った結果、変更量の少ないシンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した。</li> + <li>AliceのMeta Computationが拡張性・信頼性の高い実用的な分散アプリケーションの構築に有用であることが確認された。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="alice2---akka">Aliceと他言語等との比較(2) - Akka</h1> +<h1 id="section-8">今後の課題</h1> <ul> - <li>共通点 - <ul> - <li>tell/ask が Alice の put/take に対応</li> - <li>通信部分等を子アクターで分離し階層化</li> - </ul> - </li> - <li>相違点 - <ul> - <li>データに名前がついていないので何が来るかわかりづらい</li> - <li>Actorごとに受け取ったデータの判別処理をユーザーが書く</li> - <li>Topologyの構成はユーザーが書かないといけない</li> - <li>転送などのオーバーヘッドを考慮したメタプロトコル(Meta DS)が存在しない</li> - </ul> - </li> + <li>TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる<br /> +<img src="./pictures/overNAT.svg" alt="opt" width="60%" /> </li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-15">まとめ</h1> -<ul> - <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせる圧縮機能やゼロコピー転送の機能を実装した。</li> - <li>TreeVNCをAlice上で実装し比較を行った結果、シンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した</li> - <li>AliceのMeta Computationが信頼性の高い実 用的な分散アプリケーションの構築に有用であることが確認された</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-16">今後の課題</h1> +<h1 id="section-9">今後の課題</h1> <ul> <li>APIの再設計 <ul> @@ -653,221 +426,6 @@ </li> </ul> - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="section-17">今後の課題</h1> -<ul> - <li>TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる<br /> -<img src="./pictures/overNAT.svg" alt="opt" width="60%" /> </li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="dynamic-topology-manager-3">Dynamic Topology Manager</h1> -<p><img src="./pictures/tree1.svg" alt="" width="33%" /><img src="./pictures/tree2.svg" alt="" width="33%" /><img src="./pictures/tree3.svg" alt="" width="33%" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="codesegment--">CodeSegment の 例</h1> -<ul> - <li>RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す -<img src="./pictures/remoteTest.svg" alt="opt" width="70%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="codesegment---1">CodeSegment の 例</h1> -<ul> - <li>RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す </li> - <li>CSはInputDSを持たないStartCSからはじまる<br /> -<img src="./pictures/remoteTest2.svg" alt="opt" width="70%" /></li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="startcodesegment">StartCodeSegmentの例</h1> -<pre><code>public class RemoteStartCodeSegment extends CodeSegment { - - @Override - public void run() { - RemoteIncrement cs = new RemoteIncrement();//CSを生成 - ods.put("local", "num", 0); - } - -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="startcodesegment-1">StartCodeSegmentの例</h1> -<pre><code>public class RemoteStartCodeSegment extends CodeSegment { - - @Override - public void run() { - RemoteIncrement cs = new RemoteIncrement(); - ods.put("local", "num", 0);//DSをLocalDSMにput - } - -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="codesegment---2">CodeSegment の 例</h1> -<pre><code>public class RemoteIncrement extends CodeSegment { - - public Receiver num = ids.create(CommandType.TAKE);//DSの受け皿を作る - - public RemoteIncrement(){ - num.setKey("remote", "num"); - } - - @Override - public void run() { - int n = num.asClass(Integer.class); - if (n == 10) System.exit(0); - RemoteIncrement cs = new RemoteIncrement(); - ods.put("local", "num", ++n); - } - -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="codesegment---3">CodeSegment の 例</h1> -<pre><code>public class RemoteIncrement extends CodeSegment { - - public Receiver num = ids.create(CommandType.TAKE); - - public RemoteIncrement(){ - num.setKey("remote", "num");//CSにInputDSをセット。待ち合わせが発生。 - } - - @Override - public void run() { - int n = num.asClass(Integer.class); - if (n == 10) System.exit(0); - RemoteIncrement cs = new RemoteIncrement(); - ods.put("local", "num", ++n); - } - -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="codesegment---4">CodeSegment の 例</h1> -<pre><code>public class RemoteIncrement extends CodeSegment { - - public Receiver num = ids.create(CommandType.TAKE); - - public RemoteIncrement(){ - num.setKey("remote", "num"); - } - - @Override - public void run() { - int n = num.asClass(Integer.class);//InputDSをキャストして取得 - if (n == 10) System.exit(0); - RemoteIncrement cs = new RemoteIncrement(); - ods.put("local", "num", ++n); - } - -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="codesegment---5">CodeSegment の 例</h1> -<pre><code>public class RemoteIncrement extends CodeSegment { - - public Receiver num = ids.create(CommandType.TAKE); - - public RemoteIncrement(){ - num.setKey("remote", "num"); - } - - @Override - public void run() { - int n = num.asClass(Integer.class); - if (n == 10) System.exit(0);//num=10なら終了 - RemoteIncrement cs = new RemoteIncrement(); - ods.put("local", "num", ++n); - } - -} - -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="codesegment---6">CodeSegment の 例</h1> -<pre><code>public class RemoteIncrement extends CodeSegment { - - public Receiver num = ids.create(CommandType.TAKE); - - public RemoteIncrement(){ - num.setKey("remote", "num"); - } - - @Override - public void run() { - int n = num.asClass(Integer.class); - if (n == 10) System.exit(0); - RemoteIncrement cs = new RemoteIncrement();//次のCSを生成 - ods.put("local", "num", ++n); - } - -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 lang="java" id="codesegment---7">CodeSegment の 例</h1> -<pre><code>public class RemoteIncrement extends CodeSegment { - - public Receiver num = ids.create(CommandType.TAKE); - - public RemoteIncrement(){ - num.setKey("remote", "num"); - } - - @Override - public void run() { - int n = num.asClass(Integer.class); - if (n == 10) System.exit(0); - RemoteIncrement cs = new RemoteIncrement(); - ods.put("local", "num", ++n);//インクリメントしたDSをput - } - -} -</code></pre> - <style type="text/css"> <!-- *{