Die Kunst, effiziente Programme zu schreiben
Die Kunst, effiziente Programme zu schreiben
Zusammenfassung:
Einleitung
Das Buch „The Art of Writing Efficient Programs“ (in der deutschen Übersetzung — „Die Kunst, effiziente Programme zu schreiben“) von Fedor Pikus ist nicht nur ein weiteres Lehrbuch über C++. Es ist ein tiefer Eintauchen in die Welt der Leistung, Optimierung und Architekturentscheidungen, die gewöhnlichen Code in ein hocheffizientes Werkzeug verwandeln. Das 2021 vom Verlag Packt veröffentlichte Buch mit 446 Seiten ist für viele Entwickler, die das Maximum aus moderner Hardware herausholen wollen, zu einem unverzichtbaren Nachschlagewerk geworden.
Fedor Pikus ist ein anerkannter Experte auf dem Gebiet des Hochleistungsrechnens und hat bei Google und anderen Technologiegiganten gearbeitet. Seine Erfahrung und sein praktischer Ansatz zur Lösung von Leistungsproblemen machen dieses Buch einzigartig. Im Gegensatz zu vielen abstrakten theoretischen Arbeiten bietet Pikus konkrete, in der Praxis erprobte Methoden, die mit Beispielen in C++ untermauert werden.
Worum geht es in diesem Buch?
Das Buch widmet sich der Kunst, Programme zu erstellen, die so schnell und effizient wie möglich arbeiten und die Ressourcen von Prozessor, Speicher und Ein-/Ausgabe-Subsystem mit höchster Effizienz nutzen. Der Autor behandelt nacheinander die wichtigsten Aspekte der Leistung, von den Grundlagen bis hin zu fortgeschrittenen Techniken.
Die wichtigsten im Buch behandelten Themen:
- Leistungsmessung: Wie man Code richtig profiled, Ergebnisse interpretiert und Engpässe findet.
- Speicheroptimierung: Cache-Speicher, Datenausrichtung, Referenzlokalität, Arbeit mit dynamischem Speicher.
- Parallelität und Multithreading: Effiziente Nutzung von Threads, Synchronisation, Vermeidung von Datenrennen und Deadlocks.
- Algorithmenoptimierung: Auswahl der richtigen Datenstrukturen, algorithmische Komplexität und deren Auswirkung auf die tatsächliche Leistung.
- Vektorisierung und SIMD: Nutzung von Prozessorbefehlen zur parallelen Datenverarbeitung.
- Arbeit mit dem Compiler: Wie man dem Compiler hilft, schnelleren Code zu generieren, Optimierungsflags, Inlining.
- Design für Leistung: Architekturmuster, die von Anfang an eine hohe Geschwindigkeit vorsehen.
Für wen ist dieses Buch?
Das Buch richtet sich an Entwickler, die bereits Erfahrung mit C++ (oder einer anderen systemnahen Sprache) haben und auf die nächste Stufe gelangen möchten – die Stufe der Erstellung wirklich schneller und effizienter Anwendungen. Es wird nützlich sein für:
- Entwickler von Spielen und Grafik-Engines.
- Ingenieure, die an hochbelasteten Servern und Datenbanken arbeiten.
- Spezialisten für eingebettete Systeme und IoT.
- Alle, die Code für finanzielle, wissenschaftliche oder technische Berechnungen schreiben.
- Fortgeschrittene Studenten technischer Fachrichtungen, die systemnahe Programmierung studieren.
Was wird der Leser lernen?
Nach der Lektüre des Buches wird der Leser in der Lage sein:
- Die Leistung des eigenen Codes mit Profilern (perf, Valgrind, Google Benchmark) kompetent zu bewerten.
- Zu verstehen, wie der Prozessor-Cache funktioniert, und Code zu schreiben, der ihn optimal nutzt.
- Speicher effizient zu verwalten, Fragmentierung und unnötige Allokationen zu vermeiden.
- Sicheren und schnellen Multithread-Code unter Verwendung moderner Synchronisationsprimitive zu schreiben.
- SIMD-Befehle zu verwenden, um Berechnungen um das 2- bis 4-fache zu beschleunigen, ohne die Lesbarkeit des Codes zu beeinträchtigen.
- Optimale Datenstrukturen (std::vector vs std::list, Hash-Tabellen, Bäume) für die jeweilige Aufgabe auszuwählen.
- Features von C++17/20 (z. B. std::optional, std::variant, constexpr) zur Leistungssteigerung zu nutzen.
- Die Anwendungsarchitektur so zu entwerfen, dass sie von Anfang an auf hohe Geschwindigkeit ausgelegt ist.
Stärken des Buches
Das Buch von Fedor Pikus hebt sich durch mehrere Schlüsselmerkmale von anderen Publikationen zur Optimierung ab: <
Empfehlungen
Python. Die umfassendste Anleitung zur Entwicklung mit Beispielen aus der Stack Overflow-Community
Refactoring von Rust-Code: Vom Chaos zur Eleganz
Swift für Microservices: iOS, macOS und Cloud-Architektur
Funktionale Programmierung in Go (Golang)
DevOps für C++-Entwickler: Automatisierung, CI/CD und Containerisierung
Node.js mit TypeScript