データ指向設計
データ
指向設計
Data-Oriented Design
データ
を
逐次処理
(
反復処理
)することに
焦点
を当てた
設計方針
CPU
の
キャッシュ
を最大限活用できる
局所参照性
キャッシュは
メモリ
から一度に周辺の
データ
(
キャッシュブロック
)もとってくる。
メモリとCPUの性能差
があるので、なるべくとってくる回数は減らしたい気持ちがある
オブジェクト指向
だと反復する
単位
がでかすぎて
キャッシュミス
が頻繁に発生する。
データ思考設計だと、同じ種類の
データ
を配列としてまとめておく。
例
Enemy
に含まれる
HP
や
攻撃力
、これらの
ステータス
は
プリミティブ
なデータだから反復単位が小さい
Enemy全体でステータスごとに配列で集約して反復すると、キャッシュが最大限に活用される。
また、データの
逐次処理
のみを考えていくので
ステートレス
実装するのは、
関数
になる。
関数
は
ステートレス
にできるので、
参照透過性
がある
真の意味での
ユニットテスト
ができる!!
オブジェクト指向
の難しい
設計
や
速度
の
ボトルネック
に囚われずに済む。
ただし、
非直感的
な
設計
を要するので、慣れるまでが厳しい、とされている。
参考
Bookmark:Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)
近年
Unity
ではこのデータ指向設計を取り込んだ
DOTS
を開発している。
Unity ECS
Monobehavior
はこれに置き変わる....?かも?
それゆえ設計の管理が楽!
Unmanaged Memory
がある!
キャッシュも活かせるので速度が速い!
Unity Physics
を活用すると、
マルチスレッド
にも関わらず、
決定的
な
物理シミュレーション
を使用することができる。
これは
データ指向設計
を採用したため
参考
Bookmark: たのしいDOTS〜初級から上級まで〜