Ich versuche eine gzip-komprimierte Datei aus mehreren Threads zu lesen.C++/C Mehrere Threads zum gleichzeitigen Lesen der gz-Datei
Ich dachte, dieses deutlich Dekompression beschleunigen würde, wie meine gzread
Funktionen in mehreren Threads aus verschiedenen Datei-Offset (mit gseek
) beginnen, damit sie unterschiedliche Teile der Datei lesen.
Der vereinfachte Code ist wie
// in threads
auto gf = gzopen("file.gz",xxx);
gzseek(gf,offset);
gzread(xx);
gzclose(gf);
Zu meiner Überraschung meines Multi-Thread-Version Programm macht nicht Geschwindigkeit überhaupt auf. Die 20-Thread-Version verwendet genau die gleiche Zeit wie die Single-Thread-Version. Ich bin mir ziemlich sicher, dass das vom Diskettenengpass weit entfernt ist.
Ich denke, die zlib Inflation Funktionalität muss möglicherweise die gesamte Datei für das Lesen auch nur einen kleinen Teil zu dekomprimieren, aber ich habe keine Ahnung von ihrem Handbuch bekommen.
Wer hat eine Idee, wie man in meinem Fall beschleunigt?
In der Regel wird die meiste Zeit beim Datenlesen verbraucht. Nicht in Dekompression. Stellen Sie Ihre Daten auf die schnellsten verfügbaren Medien und versuchen Sie es erneut. – GMichael
@GMichael Danke für den Hinweis. Ich experimentierte dafür, in dem ich dasselbe Programm für zwei komprimierte Dateien ausführte, eine mit höher komprimierter Ebene der Größe 600M, die andere mit niedrigerer Ebene, aber der Größe 2G. Die erste Datei dauerte 22 Sekunden, während die zweite Datei 10 Sekunden verwendete. Es liegt also eher an der Dekompression. – fanbin
Vielleicht versuchen Sie, in jedem Thread die gleichen Dateigriffe zu verwenden und nicht separat zu öffnen. –