在ECS中更新系统的正确方法

时间:2016-03-02 09:27:00

标签: c++ entity

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

0 个答案:

没有答案