データモデルの再設計 2006091301 20060913 -MT- ■データモデル - データモデル変更の経緯 処理の最適化を行うためには、不要な処理やデータはソースコードに含めたくない ようにする必要がある。そのためには、これまで UmsDat に格納していたメンバと メソッドを、データごと(List、Loop、Interleave)に分割した方が、最適化を行い やすい。 これまではスレッド管理情報までもUmsDat に含まれていたため、スレッドのレイヤ を設けることにした。 これまでの実装は、「とにかく実際に動くものを」という観点で行っており、データ モデルの妥当性には触れてこなかった。 - これまでのデータモデルと今回変更したデータモデル [これまでのデータモデル] +-----------+ | ThreadMng | +-----------+ |1 |1..* +-----+ | Dat | +-----+ [今回変更したデータモデル] +-----------+ +---------------------+ | ThreadMng |<--| ThreadMngInterleave | +-----------+ +---------------------+ |1 |1..* +-----------------------------------------+ | Thread | +-----------------------------------------+ <>1 <>1 <>1 <>1 | 1 | 1 | 1 | 1 +-----+ +------+ +------+ +------------+ | Dat | | List | | Loop | | Interleave | +-----+ +------+ +------+ +------------+ ■各データの説明 - Dat [概要] 入出力バッファの情報を保持する。 [メンバ] バッファアドレス、バッファ処理位置、バッファ処理終了位置等 [メソッド] バイトのアライメントチェック等 - List [概要] で処理するリスト情報を保持する。 [メンバ] 区切り文字、リストの処理モード等 [メソッド] リストの処理モード変更、バッファ処理位置の更新等。 - Loop [概要] で処理するループ情報を保持する。 [メンバ] ループカウンタ等の配列 [メソッド] ループカウンタ等の配列 index の更新。 - Interleave [概要] で処理するインターリーブ情報を保持する。 [メンバ] 親子関係情報、インターリーブの処理モード等 [メソッド] インターリーブ処理を行う等。 - Thread [概要] スレッド情報を保持する。 [メンバ] スレッド状態、次スレッド、UmsDat、UmsList、UmsLoop、。 [メソッド] スレッドを休止状態にさせる、スレッドを同期状態にさせる驚き。 - Thread [概要] スレッド情報を保持する。 [メンバ] スレッド状態、次スレッド、UmsDat、UmsList、UmsLoop、UmsThread等。 [メソッド] スレッドを休止状態にさせる、スレッドを同期状態にさせる等。 - ThreadManager [概要] スレッド管理情報を保持する。 [メンバ] 現存するスレッド数、現在稼動中のスレッド等。 [メソッド] スレッドを起こす、スレッドを終了させる、スレッドを分岐させるなど。 ■備考 push, pop で値を積む積まない index(-1), pointer(0) の初期値のなど、 使い方が統一されていない。これで良いのだろうか? 以上 改版履歴 日付 作成 ファイル名 20060913 -MT- 2009091310