Эффективный способ хранения компонентов в ECS в кэш-памяти — это разделение типов компонентов на большие массивы с последующей итерацией каждой системы по компонентам.
Однако, допустим, я также хочу избежать ложного разделения между рендерингом и физическим потоком, пытающимся одновременно получить доступ к координатам объекта.
Давайте предположим, что строка кэша имеет размер 64 байта. И скажем, у меня есть массив «Позиции», который составляет 1 ГиБ. Я могу разделить его на 64-байтовые страницы, и мне нужно только одно логическое значение для хранения, занята страница (пишется) или нет. С помощью std::vector<bool>
, который использует только 1 бит для каждого bool, который занял бы 2 Mib памяти.
Пока это звучит выполнимо. Тем не мение, У меня до сих пор нет способа эффективно справиться с ситуацией, когда рабочий поток находит страницу занятой.
Должен ли я занят ждать? Существует ли общая схема решения этой проблемы?
Или, что еще важнее, это безболезненный переподготовка? Я просто пытаюсь сделать доказательство расширения моей «домашней работы» фреймворком, для изучения. Никогда не создавая большой движок, я не знаю, является ли ложное совместное использование действительно заслуживающим внимания ограничением производительности в этой ситуации.
Задача ещё не решена.
Других решений пока нет …