パスワードを忘れた? アカウント作成
431941 journal

nogの日記: jIRC: nioを使ってみる 4

日記 by nog

jIRCの通信はSocketにたいしてBufferedReaderやWriter等のクラスを利用して通信していた。これだけのせいかはわからないが、起動しただけでは特に問題ないが、実際にサーバにつないだ場合、CPUの使用率がぐんぐんあがってふっ切れる。
(なんか説明悪いけど、勘弁して、、、)

そこで、nioを使用してみることにした。ノンブロッキングIOならポーリングしなくても大丈夫だと思った訳だが、重大なことに気がつく。ポーリングは入力と出力に対してそれぞれにスレッドを作成して行っていることを思い出した。出力のポーリングってもしかしてwaitとnotifyで減らせるんじゃないだろうか、、、
とりあえずnioのクラスで入出力するようにしたが、一行ずつの入力できるメソッドがない。結局入力はBufferReaderのクラスで行うことに。

動作はとりあえず良好。だけどこの前入れ替えたTextFieldが悪さしているのか、最大化から戻したとき等、チャンネルのTestAreaにスクロールバーが消える。なんかだめだめだこりゃ

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • よくわかってないとはまりますよね。notify も wait されていない時は無視されるとか、InterruptedException の発生する個所とタイミングなどもよぉ~くわかってないとはまる。Thread.interrupted と Thread#isInterrupt とは挙動が違うなど。

    結構たくさん Thread を立ち上げててもそれぞれの負荷が小さかったら無問題なはずなんですけど、動いていない Thread で無限ループとかで CPU を結構使ってたり。

    ということで原因究明に JVM でプロファイリングしてみてはどうでしょう。

    • by nog (7146) on 2004年04月18日 4時19分 (#533773) 日記
      おっしゃる通り、JVMにプロファイルがあることをすっかり忘れていました。
      JVM以外だとHyperProfなど古いやつしか知らないのですが、Eclipseにはたくさん便利そうなのがあるんですね。(Eclipseは)sourceforge.jpにsshでcvsにつなごうとしているんですがなぜかうまくいかず、今もEmacsでがんばっています。これができると心置きなく移行できるんですけどねぇ。
      親コメント
  • by Anonymous Coward on 2004年04月19日 22時55分 (#534680)
    こんにちは、山浦です。
    Macではどうなんだか知りませんが、SwingとAWTを混ぜて使うのは
    けっこうはまるんで、やめておいたほうが無難ですよ。
    他に手が無いから仕方ないのもわかるのですが・・・
typodupeerror

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

読み込み中...