Was ist Rayon und wozu wird es benötigt?
\n\nRayon ist eine leistungsstarke Bibliothek für die Programmiersprache Rust, die eine einfache und sichere Möglichkeit zur Parallelisierung von Berechnungen bietet. Ihr Hauptmerkmal ist das Konzept der parallelen Iteratoren. Anstatt Threads, Mutexe und Kanäle manuell zu verwalten, ersetzen Sie einfach einen sequenziellen Iterator (`.iter()`) durch einen parallelen (`.par_iter()`), und Rayon verteilt die Arbeit automatisch auf alle verfügbaren Prozessorkerne.
\n\nWozu wird diese Bibliothek benötigt? In der modernen Welt sind Mehrkernprozessoren zum Standard geworden. Das manuelle Schreiben von Multithread-Code ist jedoch eine komplexe Aufgabe, die mit Datenrennen, Deadlocks und anderen schwer zu findenden Fehlern behaftet ist. Rayon übernimmt all diese Komplexitäten und bietet:
\n- \n
- Automatische Arbeitsverteilung: Die Bibliothek entscheidet selbst, wie die Daten aufgeteilt und auf die Threads verteilt werden. \n
- Typsicherheit: Dank des Ownership- und Borrowing-Systems von Rust garantiert Rayon die Abwesenheit von Datenrennen bereits zur Kompilierzeit. \n
- Work-Stealing (Arbeitsdiebstahl): Wenn ein Thread seine Aufgabe früher als andere beendet, "stiehlt" er Arbeit von beschäftigten Threads und sorgt so für eine gleichmäßige Auslastung aller Kerne. \n
- Einfachheit der Nutzung: Die API von Rayon ist für jeden Entwickler, der mit Rust-Iteratoren vertraut ist, intuitiv verständlich. \n
Rayon ist ideal für Aufgaben, bei denen große Datenmengen verarbeitet werden müssen: Bildverarbeitung, Simulationen, numerische Berechnungen, Dateiparsing und vieles mehr. Wenn sich Ihre Aufgabe leicht in unabhängige Teilaufgaben aufteilen lässt (Datenparallelität), ist Rayon Ihre Wahl.
\n\nInstallation
\n\nRayon wird auf dem Standardweg für Rust installiert – über den Paketmanager Cargo. Fügen Sie die folgende Zeile in die Datei Cargo.toml Ihres Projekts ein:
[dependencies]\nrayon = "1.10"\n\nFühren Sie anschließend den Befehl cargo build aus, und Cargo lädt die Bibliothek automatisch herunter und kompiliert sie. Rayon ist eine "reine" Rust-Bibliothek, daher sind keine zusätzlichen Abhängigkeiten oder Systemanforderungen erforderlich. Sie funktioniert unter Windows, macOS und Linux.
Schnellstart
\n\nBeginnen wir mit einem klassischen Beispiel: der Summierung eines großen Zahlenarrays. Zuerst machen wir das sequenziell, dann parallel mit Rayon.
\n\n// Bibliothek einbinden\nuse rayon::prelude::*;\n\nfn main() {\n // Großen Vektor mit Zahlen erstellen\n let numbers: Vec<u64> = (1..=10_000_000).collect();\n\n // --- Sequenzielle Summierung ---\n let sequential_start = std::time::Instant::now();\n let sum_sequential: u64 = numbers.iter().sum();\n let sequential_duration = sequential_start.elapsed();\n println!("Sequenzielle Summe: {} (Zeit: {:?})", sum_sequential, sequential_duration);\n\n // --- Parallele Summierung mit Rayon ---\n let parallel_start = std::time::Instant::now();\n let sum_parallel: u64 = numbers.par_iter().sum(); // .iter() durch .par_iter() ersetzt\n let parallel_duration = parallel_start.elapsed();\n println!("Parallele Summe: {} (Zeit: {:?})", sum_parallel, parallel_duration);\n\n // Vergleich der Beschleunigung\n println!("Beschleunigung: {:.2}x", sequential_duration.as_secs_f64() / parallel_duration.as_secs_f64());\n}\n\nIn diesem Beispiel haben wir nur eine Änderung vorgenommen: Wir haben .iter() durch .par_iter() ersetzt. Rayon hat den Vektor automatisch aufgeteilt, auf die Threads verteilt, die Teilsummen berechnet und dann die Ergebnisse zusammengeführt. Auf einem Mehrkernprozessor werden Sie eine deutliche Beschleunigung sehen.
Wichtige Methoden/Funktionen
\n\n1. par_iter()
\nWas es tut: Erstellt einen parallelen Iterator aus Referenzen auf die Elemente einer Sammlung. Dies ist die am häufigs
Auch in der Bibliothek
Rector für PHP: Vollständiges Handbuch mit Beispielen
Arbeiten mit Excel in Rust: Bibliotheken zum Lesen und Schreiben
Prisma für TypeScript: vollständige Anleitung mit Beispielen
Geolokalisierung und Karten in TypeScript: Bibliotheken und praktische Beispiele