From: Nobuyoshi Nakada Date: 2008-04-03T18:37:43+09:00 Subject: [ruby-dev:34234] Re: [質問2点] C からの定数参照 & thread switching コストの低減 なかだです。 At Wed, 26 Mar 2008 19:29:43 +0900, Hidetoshi NAGAI wrote in [ruby-dev:34144]: > ---[質問1]----------------------------------------------------- > C 言語で書かれた関数に "::AAA::BBB::CCC" という形で > 定数/クラス/モジュールのパス文字列が渡された時, > 対象となるオブジェクトを得るための低コストな実装は > どのように書くべきでしょうか. クラス/モジュールだけならrb_path2class()がありますが、任意の定数 について可能な関数はなかったと思います。rb_path2const()というの を考えたこともありますが。 > ただし,対象となるオブジェクトはこの検索の際に > autoload で読み込まれる可能性があるため, > autoload の機構はきちんと働く必要があります. autoloadの機構はrb_const_getレベルで処理しているのでほぼ透過的で す。逆にautoloadされるかチェックしたいときには、rb_autoload_p() を使う必要があります。 > また,定数が存在しないなどの例外も捕捉せねばなりません. > > 単純な方法なら,rb_eval_string_protect(str, &state) かなとは > 思うのですが... 今のところそうする以外ないと思います。 > ---[質問2]----------------------------------------------------- > thread A から thread B に処理を依頼し,その結果を thread A で > 受け取りたいという場合についてです. > > thread B は複数の thread からの依頼を受け付けるため, > thread A からの依頼を処理した後は速やかに別の依頼を > 処理する必要があります. > また,thread B には local に処理すべき仕事 > (アプリケーション全体で見ても比較的優先順位が高い) もあります. > > このような場合の実行コストをうまく低減して, > アプリケーション全体の速度低下を抑えるための > うまい方法はないでしょうか. thread Bの処理が別のnative threadで実行できる処理であれば、分離 したほうがいいのかもしれません。 thread Aとの通信が問題になりますが。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦