我目前正在尝试实现(某种)实体组件系统。
我已经掌握了它的主旨,那就是ECS应该如何运作。到目前为止,我的设计中有4个类(尚未完全实现):EntityWorld
是系统,实体及其各自组件的全局容器。它负责更新系统/步进。 EntitySystem
表示具有虚拟update
- 函数的系统的基类。 Entity
是一个容器,基本上只有一个组件列表和一个id,仅此而已。 EntityComponent
代表一个组件。现在,我想过可以多线程化我的系统,但我想我在这里遇到了一个问题。假设我的EntityWorld
以最简单的方式存储其实体,例如std::vector<Entity*>
。现在,该列表将在更新时完全传递给系统,或者EntityWorld
循环遍历此列表并逐个将实体发送到系统。但在我的理解中,当使用多个线程时,这将要求我在每次更新系统时锁定整个列表。这实际上等于性能的零增加,因为其他线程总是在等待列表获得释放。有没有更好的方法来实现这个?那么可以更新多个线程(并且r / w可以同时进行)?
提前谢谢!