民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS GroovyServ でつまづいた

<<   作成日時 : 2010/12/12 22:04   >>

驚いた ブログ気持玉 2 / トラックバック 0 / コメント 3

連想配列のテストのために用意した Groovy のスクリプト。これを実は GroovyServ で動かして試そうとしたのだが、うまくいかなかった。
なので、そのレポート。

用意した Groovy のスクリプトはこれ。

long start=System.currentTimeMillis();
def buff=[:]
def cnt=0
System.in.eachLine() {
    if (buff[it]) cnt++;
    else buff[it]=1;
}
println cnt;
println ((System.currentTimeMillis()-start)/1000);


5万行の乱数データ sample.txt を作成し

C:\home>type sample.txt | groovyclient looptest.groovy

というようにして動作時間を測定する、はずだった。

が、実際に走らせて見ると、


C:\home>type sample.txt | groovyclient looptest.groovy
starting server...
..
0
0.02

C:\home>type sample.txt | groovyclient looptest.groovy
Caught: java.io.IOException: Write end dead
        at org.jggug.kobo.groovyserv.StreamRequestInputStream.read(StreamRequestInputStream.groovy:40)
        at looptest.run(looptest.groovy:4)
        at org.jggug.kobo.groovyserv.GroovyInvokeHandler.invokeGroovy(GroovyInvokeHandler.groovy:80)
        at org.jggug.kobo.groovyserv.GroovyInvokeHandler.this$2$invokeGroovy(GroovyInvokeHandler.groovy)
        at org.jggug.kobo.groovyserv.GroovyInvokeHandler.run(GroovyInvokeHandler.groovy:47)

C:\home>type sample.txt | groovyclient looptest.groovy
18502
7.992

C:\home>type sample.txt | groovyclient looptest.groovy
18502
7.691

C:\home>type sample.txt | groovyclient looptest.groovy
Caught: java.io.IOException: Write end dead
        at org.jggug.kobo.groovyserv.StreamRequestInputStream.read(StreamRequestInputStream.groovy:40)
        at looptest.run(looptest.groovy:4)
        at org.jggug.kobo.groovyserv.GroovyInvokeHandler.invokeGroovy(GroovyInvokeHandler.groovy:80)
        at org.jggug.kobo.groovyserv.GroovyInvokeHandler.this$2$invokeGroovy(GroovyInvokeHandler.groovy)
        at org.jggug.kobo.groovyserv.GroovyInvokeHandler.run(GroovyInvokeHandler.groovy:47)

C:\home>


まず見て分かるのは、1回目の実行で、重複データの件数が0件になっていること。実行時間も0.02secとなっており、一体何を標準入力から読み込んだの? といった感じ。
そして、二度三度と走らせると、正しい結果が出力されたり、例外が出て落ちてみたりと、とにかく安定しない。

また、普通に

C:\home>type sample.txt | groovy looptest.groovy

とやると、0.4秒前後で済んでいた処理が、8秒近くと、かなり遅くなってしまっている。
これはTCP/IP通信のコストのせいなのだろうか?

とりあえず、このような問題が生じたので、その記録として、ここに書き込んでおく。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 2
驚いた 驚いた

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(3件)

内 容 ニックネーム/日時
ご報告ありがとうございます。確認します。
uehaj
2010/12/13 05:03
こんにちわ。
僕もよく同じ現象に遭遇します。
パイプなどが若干弱いような感じを受けました。
パイプはしてはいけないのかな。
ゲンゾウ
2010/12/13 14:00
uehajさん、ゲンゾウさん、こんにちは。
ゲンゾウさんのところでも同じ状況ということですので、ここはひとつ、uehajさん、よろしくお願いします。
kazuyoshikakihara
2010/12/14 07:33

コメントする help

ニックネーム
本 文
GroovyServ でつまづいた 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる