Я работаю над видеоигрой, написанной на c#, которая управляет загрузкой фрагментов карты с помощью многопоточности.
Прямо сейчас, когда требуется загрузить новую зону карты, создается / настраивается куча фрагментов карты, и каждый из них запускает новый поток для генерации своих данных, me sh, .. Таким образом, основной поток не зависит от загрузки карты, и игра сохраняет плавную частоту кадров.
Однако я видел, что создание большего количества потоков, чем доступных ядер ЦП, не рекомендуется из-за проблем с производительностью. Большинство людей рекомендуют использовать класс ThreadPool. Однако возникает новая проблема, если чанку необходимо прекратить загрузку в середине процесса (и начать загрузку другого чанка карты, предпочтительно в другом потоке). Это может легко произойти из-за непредсказуемого движения игрока.
Эта проблема существует из-за того, что ThreadPool не облегчает отслеживание и остановку потоков в нем. Поэтому я спрашиваю, как бы вы подошли к этой проблеме.
Я думал о том, чтобы всегда поддерживать живые потоки каждого куска, даже если процесс загрузки завершен, но это кажется очень разочаровывающим решением.
Заранее спасибо за помощь.