Вынесение физического движка игры в отдельный поток — распространённая практика, поскольку физические расчёты одни из самых накладных. habr.com
Для правильного выноса физического движка в отдельный поток можно предпринять следующие шаги:
- Разделить физический движок на два основных этапа. habr.com На первом он ищет коллизии (столкновения) объектов. habr.com На втором разрешает каждое из столкновений — вычисляет, какие скорости и их направления приобретают столкнувшиеся объекты. habr.com Для второй стадии можно запустить множественные потоки для каждого солвера, чтобы они вычислялись параллельно. habr.com Затем движок дождётся выполнения всех потоков, и настанет фаза синхронизации с игровой симуляцией. habr.com
- Избежать борьбы между потоками за общую информацию. selectel.ru Если нужно читать данные из глобального объекта, но избежать этого, можно скопировать срез данных на момент запуска потоков. selectel.ru
- Использовать lock-free структуры данных. selectel.ru Они позволяют потокам читать и писать в глобальный объект без data-races и крупных накладных расходов на синхронизацию. selectel.ru
Следует учитывать, что выбор решения зависит от конкретной ситуации, и общих рекомендаций по этому вопросу нет. selectel.ru