Mercurial > hg > Papers > 2020 > riono-thesis
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へ再圧縮されたデータを途中から受け取った場合} |