[openrtm-users 01349] Re: high CPU load when deactivate python component

kurihara shinji shinji.kurihara @ aist.go.jp
2010年 7月 6日 (火) 19:15:03 JST


松坂様

栗原です。

以下は、一つのExecutionContextに対して複数のRTCが登録された場合についてです。

> ・ExecutionContextは直列リストの構造をしている。
ExecutionContextは、add_component(rtobj)にて登録されたRTCをリストで管理してお
り、whileループの中では、リストに登録されているRTCのアクティビティ処理を呼び出し
ます。(正確には、StateMachineから呼ばれます。)

> ・ただし、あくまで分散コンポーネントモデルなので中央でコンテキストを管理している
>  サービスがあるわけではなく、各コンポーネント同士がバケツリレーのような形で
>  実行タイミングを通知しあっている。
RTCのリストに登録してある順番でRTCのon_execute()などを呼びますので、たとえば、
3つのRTC(A,B,C)が登録されていて、3つのRTCがACTIVE状態であれば、Aのon_execute
()が戻ってきて、Bのon_execute(),Cのon_execute()のようになります。
よって、各コンポーネント同士が実行タイミングを通知しあっているのではなく、
あるRTCのアクティビティ処理が終了次第、次のRTCのアクティビティ処理の実行をECが
行うといった仕様になっております。


以上、宜しくお願い致します。


On Tue, 6 Jul 2010 17:44:54 +0900
Yosuke Matsusaka <yosuke.matsusaka @ aist.go.jp> wrote:

> 栗原さん
> 
> 松坂です。
> 
> 2010/7/6 kurihara shinji <shinji.kurihara @ aist.go.jp>:
> > RTMでは、一つのExecutionContextで複数のRTCを駆動する事が可能となっております。
> > 仮に、非アクティブ状態でループを回さないようにした場合、一つのECに複数のRTC
> > が関連付けられてる状況において、一つの RTC が非アクティブ状態の時に、他のアク
> > ティブ状態のRTCまでも駆動関数(on_execute)が実行されないといった事になってしまい
> > ます。
> >
> > 上記のような理由もあり、ExecutionContextのループは、RTCの状態に関わらずループ
> > する仕様となっております。
> 
> なるほど、理解しました。
> 金広さん、清水さんの議論を読んで、何となく私の理解がずれている予感がしていたのですが、
> これでクリアになりました。
> 
> ・ExecutionContextは直列リストの構造をしている。
> ・ただし、あくまで分散コンポーネントモデルなので中央でコンテキストを管理している
>  サービスがあるわけではなく、各コンポーネント同士がバケツリレーのような形で
>  実行タイミングを通知しあっている。
> 
> というわけですね。
> 改良しようとしてもなかなか難しいところですね、、、。
> 
> -- 
> Yosuke Matsusaka, Ph.D  <yosuke.matsusaka @ aist.go.jp>
>   Interaction Modeling Group /
>   National Institute of Advanced Industrial Science and Technology (AIST)
>   Tel: 029-862-6726  Web: http://staff.aist.go.jp/yosuke.matsusaka/
> 


-- 
----------
栗原 眞二 <shinji.kurihara @ aist.go.jp>

独立行政法人産業技術総合研究所
  知能システム研究部門 統合知能研究グループ
  〒305-8568
  茨城県つくば市梅園1-1-1 中央第2

  TEL: 029-861-5956



openrtm-users メーリングリストの案内