From: Akinori MUSHA Date: 2007-02-26T15:13:29+09:00 Subject: [ruby-dev:30428] Re: fastthreadについて 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"