# HG changeset patch # User Nobuyasu Oshiro # Date 1315470238 -32400 # Node ID eaf3f3d169fe6d2ba87fc6818f02ec2655d3e1ae # Parent 95d46a58d75e2ef556eec221fa6351610ff72db7 modify index.html diff -r 95d46a58d75e -r eaf3f3d169fe OpenSourceConference/index.html --- a/OpenSourceConference/index.html Thu Sep 08 12:40:56 2011 +0900 +++ b/OpenSourceConference/index.html Thu Sep 08 17:23:58 2011 +0900 @@ -221,10 +221,10 @@ @@ -664,25 +664,7 @@ if (zrleInStream == null) zrleInStream = new ZlibInStream(); -
  • JavaではZlibの辞書を取り出す機能がなかった為、このような方法をとることになった。
  • - - -
    - - -
    - -
    -

    MulticastQueue

    -
  • MulticastQueueはjava.util.CountDownLatchを用いて実装されたクラスである。
  • -
  • クライアントから接続されると、データ転送用のスレッド(sender)が走る。
  • -
  • このスレッドは次に流すデータが来るまでは待機して置かなければならない。そして流すべきデータがくるとまた動き始めなければならない。
  • -
  • このスレッドの待機・解放を行うのがMulticastQueueとなる。
  • - +
  • JavaではZlibの辞書の取り出しが実装されていなかった為、このような方法をとることになった。
  • @@ -696,6 +678,56 @@
    +

    MulticastQueue

    +
  • MulticastQueueからデータを取り出し子供に送っている部分のソース
  • +
    +LinkedList bufs = c.poll();
    +int inputIndex = 0;
    +ByteBuffer header = bufs.get(inputIndex);
    +if (header==null) continue;
    +writeToClient(os, bufs, inputIndex);
    +
    +
  • c.poll(inputIndex) 内部では次の処理を行っている。
  • +
    +latch.await();
    +return next;
    +
    +
  • 次のデータが用意できるまでawait()で待つのである。
  • +
    + +
    +

    MulticastQueue

    +
  • データは作られるとMulticastQueueにputされる。
  • +

    put内部ではつぎの処理が行われる。

    +
    +Node next = new Node(item);
    +tail.set(next);
    +tail = next;
    +	  
    + + +

    +set()内部ではlatchがcountDown()され、await()で止まっていたスレッドが動き出す。 + +

    + +
    +

    MulticastQueue

    +
  • MulticastQueueは次の次のデータへの参照を順序良く行うためのクラスである。
  • +
  • + +
  • MulticastQueueはjava.util.CountDownLatchを用いて実装されたクラスである。
  • +
  • クライアントから接続されると、データ転送用のスレッド(sender)が走る。
  • +
  • このスレッドは次に流すデータが来るまでは待機して置かなければならない。そして流すべきデータがくるとまた動き始めなければならない。
  • +
  • このスレッドの待機・解放を行うのがMulticastQueueとなる。
  • + +
    + +

    MulticastQueueの問題点

  • Clientがデータを読み込まないとデータが溜まりメモリを圧迫してしまう。
  • @@ -705,42 +737,29 @@

    MulticastQueueの問題点

    -
  • 解決策
  • +
  • TimeOut(TO)スレッドを走らせ、一定の時間データを読み込まなければ代わりにこのTOが読み込むようにする。
  • - -

    - -
  • TimeOut(TO)スレッドを走らせ、一定の時間データを読み込まなければ代わりにこのTOが読み込むようにする。
  • -
    -
    - -
    -

    TreeVNCのデモ

    -
  • では実際に動かしてみる。
  • -
  • +
    + 解決策 +

    -

    TreeVNCの利点と欠点

    -
      -
    • ケーブル1本への負荷が減る。一極集中型よりスループットを維持できる。
    • -
    • 無線を使われると遅くなる。
    • -
    +

    テスト環境の構築

    +
  • CUI版のVNCクライアントを作成
  • +
  • 48台あるクラスタでCUI版のクライアントをはしらせてVNCをかけさせる。
  • +
  • 最初の1台目と48台めをGUI版のクライアントで接続を行い見比べてみる。
  • -

    テスト環境について

    -
  • CUI版のVNCクライアントを作成
  • -
  • 48台あるクラスタでCUI版のクライアントをはしらせてVNCをかけさせる。
  • -
  • 最初の1台目と50台めをGUI版のクライアントで接続を行い見比べてみる。
  • +

    TreeVNCの発端

    +
  • 大学のB3でうける授業の1つ、programming4で作り始めたことがきっかけ。
  • +
  • programming4は作りたいものを提案して作る授業。
  • +
  • 授業が終わっても改良を加えていた。
  • +
  • B4になりこの場で発表してみることになった。
  • -
    -

    -
  • -
  • -
    - + -
    -

    -
  • -
    +-->