history

青木日記 RSS

<前の日 | この月 | 次の日>

2007-03-04

fcgi.rb

おれは秘かに fcgi.rb のメンテナでもあったのだー。はははははは

……メンテするプログラム多すぎだって、マジで。

fcgi.rb をマルチスレッド対応すんのは、確かすげー簡単なんだよ。 @default_parameters['FCGI_MAX_REQS'] に 1 以上の値を入れて、 FCGI#each_request の yield でスレッドを起こせばいい。

と思ってコードを眺めてたら、 マルチスレッドの話はその通りだったが、 graceful exit の条件が完璧に間違ってたことに気付いた。 これでは全然 graceful じゃない。

まあそれはあとで直すとして、スレッドのほうについて考える。 #each を使うのをあきらめて #finish を復活させると スレッド起動部分を外に出せるな。 そのほうがいいような気もする。 YARV 後だとスレッドプールを使いたいこともあるだろうし。 よし、思いたったが吉日で即導入。

(02:49)

fcgi.rb (2)

いや、嘘だった。俺が嘘だった。 やっぱシングルスレッドの graceful exit はこれでいいんだ。 マルチスレッドになるとちょっと変える必要があるってだけだ。

(02:53)

FastCGIのメンテナ

ああそういえば、俺がメンテしてるのは pure Ruby なfcgi.rb だけね。 fcgi.so は別の話。 gem がどうなってるのか知らんのだけど、どっちなんだろうね。

(03:32)

fcgi.rb (3)

あれ? libfcgi 2.4.0 は MAX_CONNS=1, MAX_REQS=1 に固定されてるな。 もしかしてネイティブの libfcgi ってマルチスレッド対応してないのか? なんかそれもちょっと考えづらいのだが。 どっか別のところにソースがあったりする?

(04:10)

本日のツッコミ(全2件) [ツッコミを入れる]
MoonWolf (2007-03-06 22:59)

fcgi.soはネィティブな意味でのスレッドセーフにしたつもり。
fcgi.rbまではちょっと手がまわらない。
体調回復したらメンテナンスに復帰します。
もうちょっとの間お願いします。ほんとすみません。

青木 (2007-03-08 06:55)

いえいえ、fcgi.rb は自分でも使ってるので別に気にしませんよ。数が多すぎるのは自分の責任ですから。
それはともあれ、確かに fcgi.so はスレッドセーフにはなっているようですが、FastCGI プロセス自体が (まだ) マルチスレッドで動いていませんよね。ラップしている libfcgi が MAX_CONNS=1, MAX_REQS=1, MPXS_CONNS=0 固定ですから。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS