在ECS中存储组件的缓存高效方法是将组件类型划分为大型阵列,然后让每个系统迭代组件。 但是,让我们说我还想避免渲染和物理线程之间的错误共享,试图同时访问实体的坐标。
假设缓存行大64字节。而且,让我们说我有一个“职位”&#39;数组为1 GiB。我可以把它分成64个字节的页面,我只需要一个布尔值来存储页面繁忙(正在写入)或不存在。使用std::vector<bool>
,每个bool仅使用1位,这将占用2 Mib的内存。
到目前为止听起来可行。但是,我还没有办法有效地处理工作线程发现页面繁忙的情况。
我应该等忙吗?有没有一个共同的模式来解决这个问题?
或者更重要的是,这是无痛的过度工程吗?我只是想做我的&#34;家庭作业&#34;框架扩展证明,用于学习。从来没有制造过大型引擎,在这种情况下,我不知道虚假共享是否真的是一个值得注意的性能上限。