[#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:30428] Re: fastthreadについて

From: "Akinori MUSHA" <knu@...>
Date: 2007-02-26 06:13:29 UTC
List: ruby-dev #30428
At Sun, 25 Feb 2007 17:03:17 +0900,
Shugo Maeda wrote:
> ちょっと遅きに失した感もありますが、fastthreadのコードレビューを
> しましたので、いくつか気付いた点を。

 ありがとうございます!

 このようなものは本来 trunk で実験すべきですが、タイミング的に
今の trunk は落ち着いていないので、 ruby_1_8 で公開テストして
いるという状況です。(下の方に続く)

> (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の方が問題が起きやすいかもしれません。
> あと、スレッドがらみだとあるアプリケーションで問題ないからといって、
> 他のアプリケーションで問題ないとはいえないので、複数のアプリケーション
> で検証した方が望ましいですね。

 これは大きな課題です。マルチスレッドの手頃なテストスイートが
ないこともありますが、デバッグのしにくさも問題です。

 逆に、こうして Mutex や ConditionVariable を拡張ライブラリ化
することで各処理を制御下に置けるので、例えばロックや変数の値の
変更の前後で意図的にコンテクストスイッチを発生させ、スレッド・
ロック・変数の状態をモニタするような機能を付加したりはしやすく
なると思います。

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

 落ち着くまでは作者の MentTaLguY です。メールでやりとりして
いる限りコミュニケーションに問題はないので、何かあれば気軽に
連絡してあげてください。

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

 テスト促進のため ruby_1_8_6 にも入れて preview してもらって
いますが、もし問題が見つかった場合には、最終リリースは
--disable-fastthread をデフォルトにして出荷することにしています。

> 1.8.5もメンテナンスされることですし、このままえいやっと入れて
> しまってもいいですかね。

 はい、同様に 1.8.6 もメンテナンスされます。パッチリリース(-p#)
という新しい品質向上サイクルができたことで、少し楽観的な方針に
なっています。

 1.8.6 最終リリースをどうするかは、以上のレビュー結果への対応の
中で決めたいと思います。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Different eyes see different things,
    Different hearts beat on different strings --
       But there are times for you and me when all such things agree"

In This Thread