comparison FinalThesis/chapter2.tex @ 27:3a6c2fd368b4

fix chapter2
author riono <e165729@ie.u-ryukyu.ac.jp>
date Sat, 15 Feb 2020 17:15:17 +0900
parents f98010ed4fa9
children f26ac86036ba
comparison
equal deleted inserted replaced
26:f9c3bb497e9c 27:3a6c2fd368b4
91 \end{table} 91 \end{table}
92 92
93 \newpage 93 \newpage
94 94
95 \section{MulticastQueue} 95 \section{MulticastQueue}
96 配信側の画面が更新されると、VNCサーバから画面データがFRAME\_BUFFER\_UPDATEメッセージとして送らる。その際、画像データの更新を同時に複数のNodeに伝えるためにMulticastQueueというキューにデータを蓄積している。 96 配信側の画面が更新されると、VNCサーバから画面データがFRAME\_BUFFER\_UPDATEメッセージとして送られる。その際親Nodeが受け取った画像データを、同時に複数の子Nodeに伝えるためにMulticastQueueというキューにデータを蓄積を行う。
97 97
98 各NodeはMulticastQueueからデータを取得するスレッドを持つ。MulticastQueueは複数のスレッドから使用される。 98 各NodeはMulticastQueueからデータを取得するスレッドを持つ。MulticastQueueは複数のスレッドから使用される。
99 MulticastQueueはjava.util.concurrent.CountDownLatchを用いて実装されている。CountDownLatchとはjavaの並列実行用に用意されたAPIで、他のスレッドで実行中の操作が完了するまで、複数のスレッドを待機させることができるクラスである。スレッドを解放するカウントを設定することができ、カウントが0になるまでawaitメソッドでスレッドをブロックすることができる。 99 MulticastQueueはjava.util.concurrent.CountDownLatchを用いて実装されている。CountDownLatchとはjavaの並列実行用に用意されたAPIで、他のスレッドで実行中の操作が完了するまで、複数のスレッドを待機させることができるクラスである。スレッドを解放するカウントを設定することができ、カウントが0になるまでawaitメソッドでスレッドをブロックすることができる。
100 100
101 TreeVNCでは、親NodeがMulticastQueueを持っており、接続されている子Nodeの数だけ画像データにカウントを設定する。子Nodeが画像データを取得すると、そのカウントが減る。接続している全ての子Nodeが画像データを取得するとカウントが0になり、MulticastQueueから画像データが削除される。 101 TreeVNCでは、親NodeがMulticastQueueを持っており、接続されている子Nodeの数だけ画像データにカウントを設定する。子Nodeが画像データを取得すると、そのカウントが減る。接続している全ての子Nodeが画像データを取得するとカウントが0になり、MulticastQueueから画像データが削除される。
146 146
147 \newpage 147 \newpage
148 148
149 そこでZRLEEは一度Root Nodeで受け取ったZRLEのデータをunzipし、後述するUpdate Rectangleと呼ばれる画面ごとのデータに辞書を付与してzipし直すことで、初めからデータを読み込んでいなくても解凍を出来るようになっている(図\ref{fig:ZRLEtoZRLEE})。 149 そこでZRLEEは一度Root Nodeで受け取ったZRLEのデータをunzipし、後述するUpdate Rectangleと呼ばれる画面ごとのデータに辞書を付与してzipし直すことで、初めからデータを読み込んでいなくても解凍を出来るようになっている(図\ref{fig:ZRLEtoZRLEE})。
150 150
151 一度ZRLEEに変換してしまえば、子Nodeはそのデータをそのまま流すだけでよい。ただし、deflaterとinflaterでは前回までの通信で得た辞書をクリアしないとけないため、Root Node側とNode側では毎回新しく作る必要がある。辞書をクリアすることにより adaptive compressionを実現していることになり圧縮率が向上する。 151 一度ZRLEEに変換してしまえば、子Nodeはそのデータをそのまま流すだけでよい。ただし、deflaterとinflaterでは前回までの通信で得た辞書をクリアしないとけないため、Root Node側とNode側では毎回新しく作る必要がある。辞書をクリアすることで短時間で解凍され画面描画されるという、適応圧縮を実現していることになり圧縮率が向上する。
152 152
153 \begin{figure}[htb] %PDF 153 \begin{figure}[htb] %PDF
154 \begin{center} 154 \begin{center}
155 \includegraphics[scale=0.5]{fig/EncodeZRLEtoZRLEE.pdf} 155 \includegraphics[scale=0.5]{fig/EncodeZRLEtoZRLEE.pdf}
156 \figcaption{ZRLEEへ再圧縮されたデータを途中から受け取った場合} 156 \figcaption{ZRLEEへ再圧縮されたデータを途中から受け取った場合}