Избегайте ложного обмена между рабочими потоками с системой-компонент-системы

Эффективный способ хранения компонентов в ECS в кэш-памяти — это разделение типов компонентов на большие массивы с последующей итерацией каждой системы по компонентам.
Однако, допустим, я также хочу избежать ложного разделения между рендерингом и физическим потоком, пытающимся одновременно получить доступ к координатам объекта.

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

Пока это звучит выполнимо. Тем не мение, У меня до сих пор нет способа эффективно справиться с ситуацией, когда рабочий поток находит страницу занятой.

Должен ли я занят ждать? Существует ли общая схема решения этой проблемы?

Или, что еще важнее, это безболезненный переподготовка? Я просто пытаюсь сделать доказательство расширения моей «домашней работы» фреймворком, для изучения. Никогда не создавая большой движок, я не знаю, является ли ложное совместное использование действительно заслуживающим внимания ограничением производительности в этой ситуации.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]