# HG changeset patch # User riono # Date 1644464828 -32400 # Node ID 9c38517457d6ec6f3abfc1ed86bada08a178504a # Parent 67306bcc605a1f383391915e4f4544064faeeb5b update conclusion diff -r 67306bcc605a -r 9c38517457d6 Paper/chapter/1-Christie.tex --- a/Paper/chapter/1-Christie.tex Thu Feb 10 10:50:37 2022 +0900 +++ b/Paper/chapter/1-Christie.tex Thu Feb 10 12:47:08 2022 +0900 @@ -69,6 +69,27 @@ DGMに対してput操作を行うことでDGM内のqueueにDGを保管できる。 DGを取り出す際には、CG内で宣言した変数データにannotationを付ける。 +\section{Christieにおける継続} +プログラムにおける継続とは、計算の途中を前後に分割し、分割した後の部分をfirst class objectとして扱うものである。 +つまり、計算途中などのどのような状況でもそのobjectを取り出すことが可能であると言うことである。 +しかし継続を扱うためにはStackを含めた実行環境全体をheapにコピーする必要がある。 + +継続の一種に軽量継続がある。 +軽量継続は、Stackや環境のコピーを持っていないが、全ての必要な情報を関数の引数として持っている。 +必要な情報とは、計算に必要なデータや関数を実行した後にJumpするべき関数である。 + +Christieでは、CodeGearとDataGearでプログラムを行っているが、 +内部ではannotationでkeyを待ち、DataGearManagerにkeyをつけてDataGearを渡している。 +keyでつながったCodeGearに計算は接続されている。実行されたCodeGearはdataをputし、次のCodeGearをSetupしてプログラムの処理が行われていく。 +これにより簡易的な継続が行われているといえる。 + +また、keyでデータを渡すデータ構造にTreeMapを使用することがある。 +TreeMapはStackのような働きをするが、TreeMap自体を分散環境かで通信する場合に巨大なデータ構造を渡してしまうことになる。 +この方法では分散通信のパフォーマンスが低下してしまうと考えられるため、TreeMapのkey使用してPut/Takeすることで対応可能であると考える。 +その際、2nd keyとして接続先のhostname:portを指定する。 +こうするとで、データはproxyとしてアクセスすることが可能となる。 +これよりChristieは、名前付き継続と呼ぶことが可能な継続の一つを使用していると言える。 + \section{annotationを使用したデータの記述} ChristieではDGの指定にannotationを使用する。 annotationとはクラスやメソッド、パッケージに対して付加情報を記述できる @@ -135,27 +156,6 @@ その制約により、複雑になりがちな分散プログラミングのコードの可読性を高めている。 実行されたCGを再度実行する場合にも、CGのインスタンスを生成してsetupメソッドに渡す。 -\section{Christieにおける継続} -プログラムにおける継続とは、計算の途中を前後に分割し、分割した後の部分をfirst class objectとして扱うものである。 -つまり、計算途中などのどのような状況でもそのobjectを取り出すことが可能であると言うことである。 -しかし継続を扱うためにはStackを含めた実行環境全体をheapにコピーする必要がある。 - -継続の一種に軽量継続がある。 -軽量継続は、Stackや環境のコピーを持っていないが、全ての必要な情報を関数の引数として持っている。 -必要な情報とは、計算に必要なデータや関数を実行した後にJumpするべき関数である。 -%cbcの例出す? - -Christieでは、CodeGearとDataGearでプログラムを行っているが、 -内部ではannotationでkeyを待ち、DataGearManagerにkeyをつけてDataGearを渡している。 -keyでつながったCodeGearに計算は接続されている。実行されたCodeGearはdataをputし、次のCodeGearをSetupしてプログラムの処理が行われていく。 -これにより簡易的な継続が行われているといえる。 - -また、keyでデータを渡すデータ構造にTreeMapを使用することがある。 -TreeMapはStackのような働きをするが、ThreeMap自体を分散環境かで通信する場合に巨大なデータ構造を渡してしまうことになる。 -この方法では分散通信のパフォーマンスが低下してしまうと考えられるため、TreeMapのkey使用してPut/Takeすることで対応可能であると考える。 -その際、2nd keyとして接続先のhostname:portを指定する。 -こうするとで、データはproxyとしてアクセスすることが可能となる。 -これよりChristieは、0名前付き継続と呼ぶことが可能な継続の一つを使用していると言える。 \section{DataGearManagerの複数立ち上げ} @@ -282,4 +282,4 @@ \end{figure} -現在はThree型にのみ対応しているが、Star型への対応も可能である。 \ No newline at end of file +現在はTree型にのみ対応しているが、Star型への対応も可能である。 \ No newline at end of file diff -r 67306bcc605a -r 9c38517457d6 Paper/chapter/conclusion.tex --- a/Paper/chapter/conclusion.tex Thu Feb 10 10:50:37 2022 +0900 +++ b/Paper/chapter/conclusion.tex Thu Feb 10 12:47:08 2022 +0900 @@ -1,10 +1,26 @@ \chapter{まとめ} 本研究では、Christieの概要について説明を行い、Unityで使用可能な通信ライブラリの特徴を挙げた上で、ChristieをC\#に書き換える意義について述べた。 -またC\#での再実装時に発生した問題である、attributeの実装、CodeGearの処理をThreadからTaskへの変更、MessagePackのバージョン変更、 +C\#での再実装時に発生した問題である、attributeの実装、CodeGearの処理をThreadからTaskへの変更、MessagePackのバージョン変更、 MessagePackを使用する際の送信パケットの変更について述べた。 +また、ChristieとChristie Shrpの記述方法の違いと、UnityでChristie Sharpを動作させた際の記述について説明した。 +他の通信ライブラリとの比較では、PUN2とMirrorとの比較を行い、Christie SharpはUnity APIは未対応であるが、OSSにする予定のため拡張や改良が可能である。 +また、p2pで通信を行うため強力なServerを使用する必要はなく、Topology ManagerのHostをServerで動作させることで、クライアントサーバ方式に変更が可能である。 +さらに他のライブラリにはない特徴として、単体でも並列処理が可能であり、外部の並列ライブラリを導入せずに済む。 +参照すべきデータをPeekで取得することで通信切断時にも、ゲームロジックが停止せずに続行可能であり、Topology Managerの機能を拡張することによって、 +切断された際にゲームに再接続できるのではないかと考察した。 \section{今後の課題} +Topology Managerの再実装が完了しておらず、機能を十分に使用することができていない。 +特にTopology Managerが動作しているHostと親node同士の接続はできているが、子nodeからの接続がうまくできていない。 +また、現状ではTree型のTopologyのみ対応しているため、Star型など他のTopologyも対応する必要があると考える。 -\subsection{hogehoge} +DGはC\#でサポートされている全ての型を指定可能であるが、TreeMapを使用することがある。 +しかしTreeMapをデータとして通信を行うと、巨大なデータ構造となって送信してしまい分散通信のバフォーマンスを低下させる要因になる。 +そこで、TreeMapのkeyを使用してPut/Takeを行うように修正を行う必要があると考える。 +keyの他に接続先のhostname:portを2nd keyとして指定しTreeMap内のデータの通信を行う。 +Sockt通信を行っているのはTaskによりThread Poolで実行されているが、これのCodeGear化を行いたい。 +Topology Managerの実装はその大半がCodeGearとして処理されているため、Socket通信部分もCodeGear化が可能であると考える。 +必要なデータはTake/Peekを利用して渡すことで実行可能である。 + diff -r 67306bcc605a -r 9c38517457d6 Paper/master_paper.pdf Binary file Paper/master_paper.pdf has changed diff -r 67306bcc605a -r 9c38517457d6 Paper/master_paper.tex --- a/Paper/master_paper.tex Thu Feb 10 10:50:37 2022 +0900 +++ b/Paper/master_paper.tex Thu Feb 10 12:47:08 2022 +0900 @@ -101,8 +101,8 @@ \input{chapter/0-introduction.tex} \input{chapter/1-Christie.tex} \input{chapter/2-RewriteCS.tex} -\input{chapter/4-WorkingInUnity.tex} -\input{chapter/5-LibraryComparison.tex} +\input{chapter/3-WorkingInUnity.tex} +\input{chapter/4-LibraryComparison.tex} \input{chapter/conclusion.tex}