[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30412] fastthreadについて

From: Shugo Maeda <shugo@...>
Date: 2007-02-25 08:03:17 UTC
List: ruby-dev #30412
前田です。

ちょっと遅きに失した感もありますが、fastthreadのコードレビューを
しましたので、いくつか気付いた点を。

(1) rb_thread_wakeup()のrb_rescue2()

rb_thread_wakeup()をrb_rescue2()で実行してThreadErrorを無視する
ようにしていますが、THREAD_KILLEDなスレッドはスキップして次の
スレッドをwakeupしないと、だれもMutexを獲得できなくなってまずい
ような気がします。

(2) Marshalの対応

Marshalでlockでブロックしている時にもdump/loadできるようになって
いますが、今のMutexではlock中はdump/loadできないので非互換ですね。
JavaのObjectもdump/loadできる(Javaだとモニタ機構はObjectに備わって
います)ので問題ないとは思うのですが、この点については十分検討されて
いますでしょうか。

(3) malloc/free

malloc/freeを使ってますが、xmalloc/xfreeにした方がよいのでは
ないでしょうか。

(4) rb_thread_critical

いくつかrb_thread_criticalの操作をしていますが、Cレベルでは
ある種のRuby APIを呼ばないかぎりはスケジューリングイベントは
発生しないので不要ではないでしょうか。

(5) Queue

QueueはRubyレベルでMutex/ConditionVariableを使って実装した方が
いいように思います。
# というか、Queueという名前もちょっとあれなので、1.9では
# Thread::Queueとかにした方がいい気も。
そうすると、ListのsizeなどはMutex/ConditionVariableの実現には
不要なので削ることもできますね。

(6) 実績

Mongrelで使っているので実績があるということですが、ConditionVariable
は使われていないように思います。
どちらかというとConditionVariableの方が問題が起きやすいかもしれません。
あと、スレッドがらみだとあるアプリケーションで問題ないからといって、
他のアプリケーションで問題ないとはいえないので、複数のアプリケーション
で検証した方が望ましいですね。

(7) メンテナ

fastthreadのメンテナは誰になるのでしょうか?


最後の方はコードと関係なくなってますね;p
他にも何かあったような気がしますが、忘れました。
全体的に致命的な問題があるわけではない(lib/thread.rbと同じ程度
には上手く動きそう)と思うのですが、ちょっと不安です。

といって今のタイミングでコードをいじるのも恐いのですが、どうする
べきでしょうか。
1.8.5もメンテナンスされることですし、このままえいやっと入れて
しまってもいいですかね。
# そういえば、ruby_1_8_5のsignal.cの話はmputさんに伝わってるん
# でしたっけ。

-- 
前田 修吾

In This Thread

Prev Next