Mercurial > hg > Papers > 2021 > riono-sigos
changeset 15:2dd23f9603b3
update chapter Christie example
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 04 May 2021 23:41:09 +0900 |
parents | 73a3c53c7568 |
children | c65256380a80 |
files | Paper/riono-sigos.pdf Paper/riono-sigos.tex Paper/src/FinishHelloWorld.java Paper/src/HelloWorldCodeGear.java sigos2021.mm |
diffstat | 5 files changed, 83 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/riono-sigos.tex Tue May 04 20:17:17 2021 +0900 +++ b/Paper/riono-sigos.tex Tue May 04 23:41:09 2021 +0900 @@ -94,6 +94,15 @@ \section{オンラインゲームにおけるデータ通信} + + +\section{Chrisite のC\#への書き換えについて} +Chrisite はAlice というプロジェクトで開発が行われていた。しかしAlice には様々な問題点があった。 + + + + + \section{Christieの基礎概念} Chrisiteは当研究室で開発している分散通信フレームワークである。同じく当研究室で開発している GearsOSのファイルシステムに組み込まれる予定があるため、GearsOSを構成する言語 Continuation based Cと似た概念を持っている。 Chrisiteに存在する概念として以下のようなものがある。 @@ -121,19 +130,40 @@ \end{description} \section{プログラムの例} -Code \ref{code:javaSHW} はChrisite の機能を使用してhello world を出力する例題である。 -CodeGearManager を作り、setup(new CodeGear) を行うことで各CodeGear に記述されたDataGear の待ち合わせを行う。全てのDataGear が揃った場合にCodeGear が実行される。CodeGearaManager の作成方法はStartCodeGear を継承したものから、createCGM(port) を実行することにより、CodeGearManager が作成できる。 +Code \ref{code:javaSHW} 、Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} はChrisite の機能を使用してhello world を出力する例題である。 + +\lstinputlisting[caption=StartHelloWorld, label=code:javaSHW]{src/StartHelloWorld.java} +\lstinputlisting[caption=HelloWorldCodeGear, label=code:javaHWC]{src/HelloWorldCodeGear.java} +\lstinputlisting[caption=FinishHelloWorld, label=code:javaFHW]{src/FinishHelloWorld.java} + +Code \ref{code:javaSHW} ではCodeGearManager を作り、setup(new CodeGear) を行うことで各CodeGear に記述されたDataGear の待ち合わせを行う。全てのDataGear が揃った場合にCodeGear が実行される。CodeGearaManager の作成方法はStartCodeGear を継承したものから、createCGM(port) を実行することにより、CodeGearManager が作成できる。 + +Code \ref{code:javaSHW} の11、12行目はput(key, data) を行うことでDataGearManager のqueue にデータを格納することができる。key はstring 型のみで格納したい変数名を指定する。11、12行目のput ではCode \ref{code:javaHWC} のフィールド変数helloWorld を指定し、データは"hello" と"world" を逐次的に格納している。 + +Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} がCodeGearにあたる。それぞれのフィールド変数には@Take annotation が付いており、DataGearManager に格納されたkey を参照してデータを取得する。その後DataGearManger に格納されたデータは破棄される。 + +Code \ref{code:javaHWC} では最初にフィールド変数 helloWorld にstring 型の"hellow"を取得、print を行い、再びkey hello、data "hello" をDataGearManager にput している。また8行目で自らをsetpuしているため、再帰的にHelloWorldCodeGear が再実行される。2回目の実行ではフィールド変数 helloWorld に"world" が格納と出力がされ、key world、data "world" がDataGearManager に格納される。Code \ref{code:javaHWC} でput した"hello" と"world" は最終的に、Code \ref{code:javaFHW} の同名のフィールド変数に格納される。 +2回目の実行でもsetup しているが、DataGearManagerにはkey helloWorld のデータが無いため、3回目以降は実行されない。 + +Code \ref{code:javaHWC} の2回の実行後、Code \ref{code:javaHWC} のローカル変数hello とworld が全て揃ったことによりCode \ref{code:javaHWC} が実行されプログラムは終了する。 -\lstinputlisting[caption=StartHelloWorld, label=code:javaSHW]{src/StartHelloWorld.java} +\section{Unity} -\section{歴史について} +\section{C\# でのChristie} + +Code \ref{code:javaSHW} 、Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} がC\#ではこうなります + +\lstinputlisting[caption=C\# StartHelloWorld, label=code:csSHW]{src/StartHelloWorld.cs} -\section{Unity} +\section{Unityでの動作} + + + \section{annotation の書き換え} java 版ではDataGear を取得する際に、annotation という java の機能を用いて行った。C\#には annotation はなく、代わりにattribute を利用して DataGear の取得を行っている。 @@ -172,13 +202,6 @@ java では別Thread を -\section{C\#への書き換え後のプログラムの例} - -\lstinputlisting[caption=C\# StartHelloWorld, label=code:csSHW]{src/StartHelloWorld.cs} - - -\section{Unityでの動作} - \section{チート対策について}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/FinishHelloWorld.java Tue May 04 23:41:09 2021 +0900 @@ -0,0 +1,9 @@ +public class FinishHelloWorld extends CodeGear { + @Take String hello; + @Take String world; + + @Override + protected void run(CodeGearManager cgm) { + cgm.getLocalDGM().finish(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/HelloWorldCodeGear.java Tue May 04 23:41:09 2021 +0900 @@ -0,0 +1,11 @@ +public class HelloWorldCodeGear extends CodeGear { + + @Take String helloWorld; + + @Override + protected void run(CodeGearManager cgm) { + System.out.print(helloWorld + " "); + cgm.setup(new HelloWorldCodeGear()); + cgm.getLocalDGM().put(helloWorld,helloWorld); + } +}
--- a/sigos2021.mm Tue May 04 20:17:17 2021 +0900 +++ b/sigos2021.mm Tue May 04 23:41:09 2021 +0900 @@ -1,7 +1,7 @@ <map version="freeplane 1.8.0"> <!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net --> -<node TEXT="継続を使用する並列分散フレームワークのUnity実装" FOLDED="false" ID="ID_487332376" CREATED="1619755414416" MODIFIED="1620046996513"><hook NAME="MapStyle"> - <properties edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" fit_to_viewport="false" show_icon_for_attributes="true"/> +<node TEXT="継続を使用する並列分散フレームワークのUnity実装" FOLDED="false" ID="ID_487332376" CREATED="1619755414416" MODIFIED="1620058705065"><hook NAME="MapStyle"> + <properties edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" show_icon_for_attributes="true" fit_to_viewport="false"/> <map_styles> <stylenode LOCALIZED_TEXT="styles.root_node" STYLE="oval" UNIFORM_SHAPE="true" VGAP_QUANTITY="24.0 pt"> @@ -62,10 +62,23 @@ </map_styles> </hook> <node TEXT="章構成" POSITION="right" ID="ID_1198757723" CREATED="1619756376189" MODIFIED="1619756381807"> -<node TEXT="はじめに" ID="ID_1680956445" CREATED="1619881006204" MODIFIED="1619881008023"/> +<node TEXT="はじめに" ID="ID_1680956445" CREATED="1619881006204" MODIFIED="1619881008023"> +<node TEXT="オンラインゲームにおけるデータ通信" ID="ID_1594851102" CREATED="1620127110294" MODIFIED="1620127112435"/> +</node> <node TEXT="Chrisiteの基礎概念" ID="ID_829515532" CREATED="1619881009429" MODIFIED="1619881564341"/> +<node TEXT="ChrisiteのC#への書き換え" ID="ID_1515152892" CREATED="1620127145093" MODIFIED="1620127192649"> +<node TEXT="C#に書き直す理由について" ID="ID_1010697844" CREATED="1620127291834" MODIFIED="1620127306656"/> +<node TEXT="annotationについて" ID="ID_385442849" CREATED="1620127205311" MODIFIED="1620127211667"> +<node TEXT="ユーザーの使用例" ID="ID_129408890" CREATED="1620127227118" MODIFIED="1620127246337"/> +</node> +<node TEXT="keyについて" ID="ID_1836173751" CREATED="1620127213690" MODIFIED="1620127219436"/> +</node> <node TEXT="Unity" ID="ID_1940500532" CREATED="1619881615121" MODIFIED="1619881621836"/> -<node TEXT="書き換えの方針" ID="ID_886769487" CREATED="1619881623845" MODIFIED="1619881628823"/> +<node TEXT="書き換えの方針" ID="ID_886769487" CREATED="1619881623845" MODIFIED="1619881628823"> +<node TEXT="annotation" ID="ID_1575265406" CREATED="1620127338849" MODIFIED="1620127344761"/> +<node TEXT="MessagePack" ID="ID_839127787" CREATED="1620127345893" MODIFIED="1620127351486"/> +<node TEXT="ThreadからTaskへ" ID="ID_105028350" CREATED="1620127352019" MODIFIED="1620127370790"/> +</node> <node TEXT="チート対策について" ID="ID_1117874565" CREATED="1619881632334" MODIFIED="1619881637003"/> <node TEXT="まとめ" ID="ID_1303888531" CREATED="1619881638327" MODIFIED="1619881642359"/> </node> @@ -156,10 +169,20 @@ <node TEXT="詳細" ID="ID_1773448852" CREATED="1619879977664" MODIFIED="1619879987047"> <node TEXT="プログラムを書いたものを書く" ID="ID_1672514353" CREATED="1619880037661" MODIFIED="1619880051961"/> <node TEXT="annotationとattibuteについて" ID="ID_1857958118" CREATED="1619879987454" MODIFIED="1619879999567"/> -<node TEXT="messagepackの違い" ID="ID_42679650" CREATED="1619880001386" MODIFIED="1619880010425"/> +<node TEXT="messagepackの違い" ID="ID_42679650" CREATED="1619880001386" MODIFIED="1619880010425"> +<node TEXT="java版は古いものを使っている" ID="ID_1904877888" CREATED="1620058837272" MODIFIED="1620058849124"/> +<node TEXT="C#はjava版と同じように書くものを使っている" ID="ID_1438697742" CREATED="1620058850775" MODIFIED="1620058870778"/> +<node TEXT="パケットの中身を変更した" ID="ID_1805162337" CREATED="1620058883327" MODIFIED="1620058904446"/> +</node> <node TEXT="ExcuterをTaskにした" ID="ID_199684922" CREATED="1619880056153" MODIFIED="1619880080017"/> </node> </node> +<node TEXT="C#での書き換え後のプログラム例" POSITION="left" ID="ID_349126780" CREATED="1620058760028" MODIFIED="1620058777763"> +<node TEXT="java版と比較する" ID="ID_69807001" CREATED="1620058781266" MODIFIED="1620058788908"/> +</node> +<node TEXT="Unityでの動作" POSITION="left" ID="ID_788621253" CREATED="1620058690977" MODIFIED="1620058706651"> +<node TEXT="コード例" ID="ID_2986440" CREATED="1620058715991" MODIFIED="1620058720589"/> +</node> <node TEXT="チート対策について" POSITION="left" ID="ID_459484271" CREATED="1619757884807" MODIFIED="1619761959958"> <node TEXT="チートの定義" ID="ID_1377341220" CREATED="1619762172620" MODIFIED="1619762178344"> <node TEXT="メモを取るのは?" ID="ID_774204501" CREATED="1619769398229" MODIFIED="1619769403550"/>