Как многопоточность большой последовательности - PullRequest
0 голосов
/ 15 марта 2020

Если это имеет значение, я работаю в Unity с C#.

В любом случае, я работаю над двухмерной нисходящей игрой и, чтобы имитировать нашу воду (и различные другие угрозы для окружающей среды, которые имеет прямое отношение к игровому процессу), я использую большую 2D-сетку, в которой хранится информация об опасности в данном пространстве. Через некоторый интервал я перебираю сетку, и каждое пространство реагирует на свои 4 соседних пространства. Этот процесс проблематично не медленный, но мне не нравится, как он связан с одним потоком и занимает много времени, когда в моделируемой области присутствует большое количество опасностей.

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

1 Ответ

0 голосов
/ 28 марта 2020

Метод, который я в конечном итоге использовал для решения своей проблемы, состоял в том, чтобы разбить мой большой 2D-массив на куски и выполнить последовательные вычисления (каждый кусочек соответствовал кусочкам, вертикально и горизонтально смежным) для каждого кусочка в отдельном потоке, но оставил одни только части данных (которые будут влиять / будут затронуты смежными частями других частей). Завершив все фрагменты, я бы затем перебрал пропущенные части в главном потоке (или, в случае Unity, одну работу с пакетной компиляцией для сверхвысокой скорости), чтобы сформировать связное целое.

...