Rust Atomics und Schlösser

Book description

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Die Programmiersprache Rust eignet sich hervorragend für Nebenläufigkeit, und ihr Ökosystem enthält viele Bibliotheken mit vielen nebenläufigen Datenstrukturen, Sperren und mehr. Die korrekte Implementierung dieser Strukturen kann jedoch sehr schwierig sein. Selbst in den am meisten genutzten Bibliotheken sind Fehler bei der Speicheranordnung keine Seltenheit.

In diesem praktischen Buch hilft Mara Bos, die Leiterin des Rust-Bibliotheks-Teams, Rust-Programmierern aller Niveaus, ein klares Verständnis von Low-Level-Gleichzeitigkeit zu erlangen. Du erfährst alles über Atomics und Speicherordnung und wie sie mit grundlegenden Betriebssystem-APIs kombiniert werden, um gängige Primitive wie Mutexe und Bedingungsvariablen aufzubauen. Am Ende des Kurses wirst du genau wissen, wie das Speichermodell von Rust, der Prozessor und die Rolle des Betriebssystems zusammenpassen.

Mit diesem Handbuch lernst du:

  • Wie das Typensystem von Rust außergewöhnlich gut für die korrekte Programmierung von Gleichzeitigkeit funktioniert
  • Alles über Mutexe, Bedingungsvariablen, Atomics und Speicherordnung
  • Was in der Praxis mit atomaren Operationen auf Intel- und ARM-Prozessoren passiert
  • Wie Sperren mit Unterstützung des Betriebssystems implementiert werden
  • Wie man korrekten Code schreibt, der Gleichzeitigkeit, atomare Operationen und Sperren beinhaltet
  • Wie du deine eigenen Sperr- und Synchronisationsprimitive richtig erstellst

Table of contents

  1. Vorwort
  2. Vorwort
    1. Für wen dieses Buch ist
    2. Überblick über die Kapitel
    3. Code Beispiele
    4. In diesem Buch verwendete Konventionen
    5. Kontaktinformationen
    6. Danksagungen
  3. 1. Grundlagen der Rust-Gleichzeitigkeit
    1. Fäden in Rust
    2. Eingeschränkte Fäden
    3. Geteiltes Eigentum und Referenzzählung
      1. Statik
      2. Auslaufende
      3. Referenzzählung
    4. Ausleihen und Datenwettläufe
    5. Innere Wandlungsfähigkeit
      1. Zelle
      2. RefCell
      3. Mutex und RwLock
      4. Atomics
      5. UnsafeCell
    6. Themensicherheit: Senden und Synchronisieren
    7. Sperren: Mutexe und RwLocks
      1. Rust's Mutex
      2. Vergiftung durch Schlösser
      3. Leser-Schreiber-Sperre
    8. Warten: Parken und Bedingungsvariablen
      1. Thema Parken
      2. Bedingungsvariablen
    9. Zusammenfassung
  4. 2. Atomics
    1. Atomare Lade- und Speichervorgänge
      1. Beispiel: Stopp-Flagge
      2. Beispiel: Fortschrittsbericht
      3. Beispiel: Faule Initialisierung
    2. Abrufen und Ändern von Vorgängen
      1. Beispiel: Fortschrittsberichte aus mehreren Threads
      2. Beispiel: Statistik
      3. Beispiel: ID-Zuweisung
    3. Vergleichs- und Tauschoperationen
      1. Beispiel: ID-Zuweisung ohne Überlauf
      2. Beispiel: Faule einmalige Initialisierung
    4. Zusammenfassung
  5. 3. Speicher bestellen
    1. Neuordnung und Optimierungen
    2. Das Speichermodell
    3. Happens-Beziehung
      1. Ablaichen und Verbinden
    4. Entspanntes Bestellen
    5. Freigeben und Erwerben Bestellen
      1. Beispiel: Sperren
      2. Beispiel: Faule Initialisierung mit Indirektion
    6. Bestellung verbrauchen
    7. Sequentiell konsistentes Bestellen
    8. Zäune
    9. Häufige Missverständnisse
    10. Zusammenfassung
  6. 4. Unser eigenes Spin Lock bauen
    1. Eine minimale Implementierung
    2. Ein unsicheres Spin Lock
    3. Eine sichere Schnittstelle mit einem Lock Guard
    4. Zusammenfassung
  7. 5. Unsere eigenen Kanäle aufbauen
    1. Ein einfacher Kanal auf Mutex-Basis
    2. Ein unsicherer One-Shot-Kanal
    3. Sicherheit durch Laufzeitkontrollen
    4. Sicherheit durch Typen
    5. Kreditaufnahme zur Vermeidung der Zuteilung
    6. Blockieren
    7. Zusammenfassung
  8. 6. Unseren eigenen "Bogen" bauen
    1. Grundlegende Referenzzählung
      1. Testen
      2. Mutation
    2. Schwache Zeiger
      1. Testen
    3. Optimieren
    4. Zusammenfassung
  9. 7. Das Verständnis des Prozessors
    1. Prozessor Anweisungen
      1. Laden und Speichern
      2. Lesen-Ändern-Schreiben-Operationen
      3. Lastverknüpfte und speicherbedingte Anweisungen
    2. Caching
      1. Cache-Kohärenz
      2. Auswirkungen auf die Leistung
    3. Neu ordnen
    4. Speicher bestellen
      1. x86-64: Stark geordnet
      2. ARM64: Schwach geordnet
      3. Ein Experiment
      4. Gedächtniszäune
    5. Zusammenfassung
  10. 8. Primitive Betriebssysteme
    1. Schnittstelle zum Kernel
    2. POSIX
      1. Einwickeln in Rost
    3. Linux
      1. Futex
      2. Futex-Geschäfte
      3. Vorrangige Vererbung Futex-Operationen
    4. macOS
      1. os_unfair_lock
    5. Windows
      1. Schwergewichtige Kernel-Objekte
      2. Leichtere Objekte
      3. Adressbasiertes Warten
    6. Zusammenfassung
  11. 9. Eigene Schlösser bauen
    1. Mutex
      1. Syscalls vermeiden
      2. Weiter optimieren
      3. Benchmarking
    2. Bedingung Variable
      1. Syscalls vermeiden
      2. Vermeiden von unerwünschten Weckern
    3. Leser-Schreiber-Sperre
      1. Vielbeschäftigte Schreiber vermeiden
      2. Vermeiden von Autorenhunger
    4. Zusammenfassung
  12. 10. Ideen und Inspiration
    1. Semaphor
    2. RCU
    3. Lock-Free Linked List
    4. Warteschlangen-basierte Sperren
    5. Schlösser auf dem Parkplatz
    6. Sequenzsperre
    7. Unterrichtsmaterialien
  13. Index
  14. Über den Autor

Product information

  • Title: Rust Atomics und Schlösser
  • Author(s): Mara Bos
  • Release date: September 2024
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9781098195267