Index: [Article Count Order] [Thread]

Date: Mon, 26 Aug 2002 14:51:24 +0900 (JST)
From: GOTOU Yuuzou <gotoyuzo@notwork.org>
Subject: [webrickja:40] Re: accelerator
To: webrickja@notwork.org
Message-Id: <20020826.145124.123575921.gotoyuzo@kotetsu.does.notwork.org>
In-Reply-To: <20020826042519.0745e599.keita@kyomu.info>
References: <20020826042519.0745e599.keita@kyomu.info>
X-Mail-Count: 00040

In message <20020826042519.0745e599.keita@kyomu.info>,
 `keita yamaguchi <keita@kyomu.info>' wrote:
> はじめまして、keitaと申します。

はじめまして。

> * timeout
> 
> タイムアウト処理におけるスレッドの new & kill の負荷が
> 大きいのでこれを軽減するtimeoutxライブラリを作成しました。
> 一応汎用性を期待して別パッケージにしてこれを使用しています。

すばらしい。
# 0.1.0 は typo があるようです。末尾にパッチつけます。

ええと、これは WEBrick 側で何もしなくても利用者側で require す
ればよいということですね。

> * zero copy
> 
> Linux依存になりますが、システムコール sendfile を使って
> zero copy 通信をするようにしてみました。
> これもインターフェイス部分は汎用性があるかと思って
> 別パッケージにしています。
> 
> http://kyomu.info/obj/comp/archive/ruby-sendfile-0.1.1.tar.gz
> 
> これで改善されるのは静的なコンテンツの転送くらいなわけで、
> 一般的なWEBrickの使用目的から考えるとあまり効果的でないかも知れませんが
> 部分的にでも速いに越したことはないと思います。

# FreeBSD のログによると、sendfile はまさにそういうことをする
# ために作られたような感じですねえ。
# http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/uipc_syscalls.c#rev1.42
# … FreeBSD のは Linux と API が微妙に違いますが、HP-UX はど
# うなんでしょ。

速さとはちょっと違うんですが、大きなファイルを転送する場合に、
HTTPResponse がバッファをまるごと抱えないといけないのをなんと
かしたいとは思っていました。

API としては、body に IO をセットしたら、そこから少しずつ読み
取って送信するという感じにするつもりだったんですが、まさに 
sendfile はぴったりですねえ。webrick-accelarator もそのほうが
書きやすそうだし。

うーん、どうしましょ。

-- 
ごとうゆうぞう

--- timeoutx.rb~        Sun Aug 25 19:31:24 2002
+++ timeoutx.rb Mon Aug 26 05:28:39 2002
@@ -24,5 +24,5 @@
   def countdown
     @table.keys.each do |th|
-      @list[th] -= @interval
+      @table[th] -= @interval
       if @table[th] <= 0
         th.raise(TimeoutError, "execution expired") if th.alive?