TL;DR
Die numerische Berechnung, die in Python 3 Minuten dauerte ・ Durch das Ersetzen des Schreibvorgangs für Textdateien mit etwa 8 Millionen Zeilen durch Rust wurde der Vorgang etwa fünfmal schneller
https://github.com/MIERUNE/japan-mesh-tool
Das obige ist ein Python-Modul, das ein japanisches regionales Netz im .geojsonl-Format generiert, das auch in diesem Artikel eingeführt wurde. Es handelt sich um eine rein numerische Berechnung, die nur mit dem Standardmodul geschrieben werden kann. In einem kubischen Netz beträgt die Anzahl der Polygone jedoch weniger als 8 Millionen, und wie später beschrieben wird, beträgt die erforderliche Zeit etwa 3 Minuten.
Ich habe auch versucht, Rust zu studieren, um zu sehen, wie viel schneller es wäre, wenn ich diesen Python-Prozess durch Rust ersetzen würde. Der Rust-Code ist übrigens auch im obigen Repository enthalten.
Das Optimieren des Algorithmus führte nicht zu einer dramatischen Geschwindigkeitsverbesserung. Python selbst ist eine Interpretersprache und Sie sollten nicht nach Geschwindigkeit fragen. Wenn Sie numpy verwenden, wird es mit Hilfe der C-Sprache schneller, aber ich habe es gelöscht, weil ich es unabhängig von externen Modulen halten wollte.
Kampf!
Python
time python main.py 3
initializing...
making meshes...
writing file...
done
real 2m46.227s
user 2m31.846s
sys 0m11.249s
166,227 Sekunden
Rust
time ./target/release/japan-mesh 3
real 0m35.955s
user 0m34.233s
sys 0m1.272s
35,955 Sekunden
35.955/166.227=21.63006%
Etwa 5 mal schneller!
――Es scheint schnell zu sein »Es scheint jetzt heiß zu sein
Ich begann mit einem so leichten Verständnis. Wenn ich jetzt darüber nachdenke, denke ich, dass das Attraktivste die Leichtigkeit ist, die Umwelt aufzubauen. Sie können alle Compiler und Paketmanager mit einem einzigen Befehl eingeben.
Es ist ein bisschen bitter, aber es ist schwieriger als Python. Was Rust jedoch schwierig macht, ist das Konzept des Besitzersystems und der Lebensdauer. Mit nur numerischen Berechnungen wie dieser können Sie etwas erstellen, das auch dann funktioniert, wenn der Compiler wütend wird.
»Ich bin froh, dass Rust, der einen seltsamen Code haben sollte, schnell ist. ―― Natürlich ist der Geschwindigkeitsunterschied des Berechnungsteils offensichtlich, aber es scheint, dass sich das Schreiben der Datei nicht so sehr ändert --Rust wird wütend, wenn der Compiler guten und seltsamen Code schreibt ――Ich denke, der Code bietet Raum für Optimierungen.