[#697] ++[Re: dylan [Re: swap values(Re: call by reference)]] —
けいじゅ@SHLジャパンです.
1 message
1996/10/01
[#869] Append Member — Kouki Higuchi <luke@...>
Please let me be a participate.
1 message
1996/10/20
[#895] sleep eternaly on BOW(Re: ruby 0.99.2-961023 available) — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/24
[#906] [REQ]Get Strings!<3> GETS, SUB — Shin-ichiro Hara <sinara@...>
原です。
5 messages
1996/10/27
[#907] [REQ]Get Strings!<4> SPLIT — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/27
[#920] bug report(each) — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
8 messages
1996/10/29
[#928] Re: hajimemashite — Itsuro Saito <saito@...>
斎藤@東大電子情報です.
9 messages
1996/10/29
[#938] ruby 0.99.3-961030 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
7 messages
1996/10/30
[#954] Rational — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
23 messages
1996/10/30
[#955] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/30
まつもと ゆきひろです.
[#968] Re: Rational
—
1996/10/31
けいじゅ@SHLジャパンです.
[#970] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/31
まつもと ゆきひろです.
[#956] Re: Rational[coerce(Re: ruby 0.99.3-961030 available) ] — Shin-ichiro Hara <sinara@...>
原です。
4 messages
1996/10/30
[#965] ruby-mode — Yasuo OHBA <jammy@...>
大庭@SHLJapanです.
6 messages
1996/10/31
[ruby-list:766] Re: httpd.rb (Re: sample/svr.rb (socket, select))
From:
Shin-ichiro Hara <sinara@...>
Date:
1996-10-07 03:22:44 UTC
List:
ruby-list #766
原です。
> # socket example - server side using thread
> # usage: ruby tsvr.rb
>
> require "socket"
> require "thread"
>
> gs = TCPserver.open(0)
> addr = gs.addr
> addr.shift
> printf("server is on %d\n", addr.join(":"))
>
> while TRUE
> ns = gs.accept
> print(ns, " is accepted\n")
> Thread.start do
> s = ns # save to dynamic variable
> while s.gets
> s.write($_)
> end
> print(s, " is gone\n")
> s.close
> end
> end
>
> 短いですね。でもこれを書いてみたら,Socket#acceptがthread対
> 応になっていませんでした。次のリリース以降でしか動きませんね。
ああ、そうか。accept でブロックしてしまう心配は、Thread でコネク
ションごとの処理をまとめてしまえば無用なんだ。accept が thread
対応になっていないという意味が分からなかったけど。(^^;
> 原さんのsvr.rbが何をしているのか良く分からなかったのですが
> (特にsyncronizeのあたり),threadに関して一般的に言えるのは
> 自分から実行権を渡すためにはThread.passを使うと思います。
> sleepしちゃうと寝てしまいますから。
sleep の間は CPU の占有時間(というのだろうか?)が小さくなら
ないのですか?
私のは同時に動かす Thread の数を $max_thread で制限しています。
ですから、この制限つき tsvr.rb はこんな風になるでしょうか。
-------------------------------------------------------------^
# socket example - server side using thread
# usage: ruby tsvr.rb
require "socket"
require "thread"
max_thread = 4
gs = TCPserver.open(0)
addr = gs.addr
addr.shift
printf("server is on %d\n", addr.join(":"))
m = Mutex.new
threads = 0
while TRUE
ns = gs.accept
print(ns, " is accepted\n")
Thread.pass while threads >= max_thread
m.syncronize{ threads += 1 }
Thread.start do
s = ns # save to dynamic variable
while s.gets
s.write($_)
m.syncronize{ threads -= 1 }
end
print(s, " is gone\n")
s.close
end
end
-------------------------------------------------------------$
> * threadを使うことによって処理全体が高速化されることは絶対
> にない
>
> ということです。特にrubyのthreadは毎回スタックをコピーしてい
> ますので,あまり軽くないですから。じゃあthreadを使うメリット
> はないのかというと,ブロックすることがなくなるのでインタラク
> ティヴなプログラムの反応時間が速くなることが期待できることで
> しょう。
わかりました。多分 Thread は http server には向いていますね。
Shin-ichro Hara(Nagaoka Univ.of Tech.)