Как управлять сотнями потоков, чтобы они могли быть остановлены в любое время? - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю над видеоигрой, написанной на c#, которая управляет загрузкой фрагментов карты с помощью многопоточности.

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

Однако я видел, что создание большего количества потоков, чем доступных ядер ЦП, не рекомендуется из-за проблем с производительностью. Большинство людей рекомендуют использовать класс ThreadPool. Однако возникает новая проблема, если чанку необходимо прекратить загрузку в середине процесса (и начать загрузку другого чанка карты, предпочтительно в другом потоке). Это может легко произойти из-за непредсказуемого движения игрока.

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

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

Заранее спасибо за помощь.

...