Ich arbeite an einer Anwendung, die mehrere Videos gleichzeitig anzeigt. Die Videos werden in Form von Verzeichnissen voller Bilddateien gespeichert. Für jede Bildnummer gibt es bis zu 9 Bilder, die von der Festplatte geladen werden müssen. Ich würde gerne Caching und Read-ahead für die Bilder implementieren. Das wäre ziemlich einfach, aber die Komplikation besteht darin, dass das Dateisystem (manchmal ein Netzwerk-FS) bei weitem nicht schnell genug ist, um jedes Bild anzuzeigen. Der Lesekopf sollte also auswählen, welche Bilder er zu laden versucht, und nur für diese Bilder read()-Anfragen stellen. Außerdem wäre es am besten, wenn er bei der Entscheidung, welche Bilder er laden will, berücksichtigen könnte, welche Bilder bereits im Cache sind.
Ich habe mir einen gierigen Algorithmus ausgedacht, der ganz gut funktioniert, aber ich frage mich, ob dies ein Problem ist, das untersucht wurde, und ob es bessere/optimale Algorithmen gibt.
Ich gehe davon aus, dass die Zeit in Bezug auf die Bildrate und nicht in Sekunden gemessen wird, um die Pseudocodierung zu vereinfachen.
load_time_per_image = how long it takes to load an image
images_per_frame = the number of images to display simultaneously
worst_time = images_per_frame * load_time_per_image
def decide_next_frame_to_load:
for each frame from now to now + worst_time:
loadable = (frame - now) / load_time_per_image
if number_of_images_cached(frame) > images_per_frame - loadable:
# this frame is the first one it's possible to load in time.
return frame
Hat jemand Vorschläge? Vielen Dank für Ihre Hilfe! -Thomas