Cache-freundlicher Code ist viel schneller als Sie denken

2025-05-07

Programmierer konzentrieren sich oft auf die algorithmische Komplexität und übersehen dabei den Einfluss der modernen Speicherhierarchie von Hardware auf die Leistung. Dieser Artikel vergleicht experimentell die Leistungsunterschiede zwischen sequentiellem, indirektem und zufälligem Speicherzugriff. Die Ergebnisse zeigen, dass sequenzieller Zugriff am schnellsten ist, während zufälliger Zugriff um eine Größenordnung langsamer ist. Die Optimierung von Speicherzugriffsmustern ist entscheidend für die Leistung; selbst einfache Operationen erzielen durch optimierte Speicherlayouts enorme Verbesserungen. Der Artikel rät, Speicherzugriffsmuster bei der Gestaltung von Datenstrukturen und Algorithmen zu berücksichtigen, z. B. durch Platzieren häufig verwendeter Daten nebeneinander im Speicher, um den CPU-Cache zu nutzen und Cache-Fehltreffer zu vermeiden.

Mehr lesen
Entwicklung Speicherzugriff

Haskell-Concurrency: Ausbruch aus der Thread-Hölle

2025-04-17

Dieser Artikel beschreibt die Reise des Autors von der Entwicklung eingebetteter Systeme in C/C++/Rust zu Haskell und hebt die Vorteile von Haskell in der konkurrenten Programmierung hervor. Haskell verwendet Green Threads und ereignisgesteuerte E/A und vermeidet so die Komplexität traditioneller Thread-Modelle. Über das `async`-Paket und STM (Software Transactional Memory) bietet Haskell einen saubereren und sichereren Ansatz für konkurrente Aufgaben. Funktionen wie `concurrently`, `race` und `mapConcurrently` sowie Datenstrukturen wie `TVar` und `TBQueue` vereinfachen konkurrente Operationen und vermeiden häufige Concurrency-Probleme wie Deadlocks und Race Conditions.

Mehr lesen
Entwicklung