Суть задачи такова:
Есть 2 потока. В первом в бесконечном цикле крутятся простые задачи, которые не сильно нагружют компьютер, но обязаны выполнятся с чётким фреймрейтом без подлагиваний.
Второй поток чаще все вообще не существует, но создаётся когда нужно прочитать какие-то очень тяжёлые файлы и подгрузить их внутрь первого потока. В этом момент жёсткий диск может стать бутылочным горлышком всей программы, из-за чего первый поток начнёт лагать.
Цель не допустить этого и подгружать файлы с динамичной скоростью чтения, дабы не забить жесткий диск.
Если отойти от абстракции, то наверняка вы знакомы с такой проблемой в видеоиграх, когда при подгрузке сцены игра на пару кадров подвисает. Цель как раз таки избавиться от такого подвисания.
Dmitrii, Больше похоже на костыль, чем на адеквтное решение. Тем более что игровая сцена целиком легко может весить несколько гигабайтов или даже больше. Хранить её мёртвым грузом такое себе решение. В играх как раз и используются подгрузки кусков сцены по необходимости
У тебя должна быть shared memory для всех потоков-участников этого процесса.
И один из потоков (главный) должен заранее планировать что какие-то части
файлов должны находится в shared memory в нужное время. Технически
для C/C++ это решенная задача. Тут единственное что интересно - это
обсуждать логику главного потока. Тоесть когда и в какой момент времени
главный должен решать что подгружать. А может он передумает и решит
что надо срочно выгружать потому что сюжет игры меняется. Или игрок
будет бегать между 2 левлами через портал и постоянно перегружать
уровни туда-сюда.
Доходит игрок до некого триггера, чем инициализирует процесс подгрузки уровня(в целом он может подгрузиться и не сразу, я допускаю что этот процесс займёт какой-то время). После чего создаётся второй поток, внутри которого создаются буферы, в них и будем выгружать данные с харда. После окончания загрузки ждём когда первый поток доложит об окончании итерации, после чего просто скидываем буферы из второго потока в первый(так как у меня используется список, то процесс этот займёт константное время. После подвязки данных убиваем второй поток и продолжаем дальше.