David Schirrmeister 6d0b0a212a updatet
2024-05-10 12:26:31 +02:00

5.4 KiB

Threads

  • Kleinste ausführbare Einheit innerhalb eines Prozesses

  • ermöglichen flexiblere, reaktionsschnellere und effizientere Programmierung

  • müssen sorgfältig überwacht werden, um Probleme zu vermeiden

Threads vs Prozesse

Merkmal Thread Prozess
Definition Kleinste ausführbare Einheit innerhalb eines Prozesses Unabhängiges Programm in Ausführung
Ressourcenzuweisung Teilen denselben Adressraum & Ressourcen innerhalb eines Prozesses Haben eigenen Adressraum und separate Ressourcen
Kommunikation direkter Zugriff auf gemeinsame Daten
erfordert synchronisierte Mechanismen
erfordert aufwändige Mechanismen wie IPC
Synchronisation benötigt Synchronisationsmechanismen um Rennbedingungen zu vermeiden Isoliert voneinander, weniger Rennbedingungen,
aber schwerere Synchronisation zwischen Prozessen
Overhead geringerer Overhead höherer Overhead, da separate Adressräume und Ressourcen
Ressourcennutzung effiziente Nutzung innerhalb desselben Prozesses höherer Ressourcenverbrauch aufgrund separater Adressräume
Erstellung und Terminierung schnellere Erstellung und Terminierung
Terminierung beeinflusst nur den spezifischen Thread
Langsamere Erstellung und Terminierung
Beenden eines Prozesses beendet alle seine Threads
Fehlerisolierung Scheitern eines Threads kann gesamten Prozess beeinträchtigen Isoliert, Scheitern beeinflusst keine anderen Prozesse
  • Thread wird auch als Aktivitätsträger oder leichtgewichtiger Prozess benannt
    • ist immer Teil eines Prozesses
      • Prozess kan viele Threads gleichzeitig enthalten
        • werden unabhängig voneinander (ähnlich Prozesse) abgearbeitet
      • Prozess besteht bei Erzeugung aus einem Thread
        • wird impliziert mit dem Prozess erzeugt
Thread Prozess
Leichter Prozess Programm in Ausführung
Gehört zu Prozess Vollständig isoliert
gemeinsamer Speicher eigener Speicher
geringer Ressourcenverbrauch hoher Ressourcenverbrauch
niedriger Zeitbedarf bei Kontextwechsel hoher Zeitbedarf bei Kontextwechsel

Abarbeitung von Threads ist ca. 10-100 mal schneller im Vergleich zur Verarbeitung
von Prozessen.

Threads nutzen den gleichen Adressraum, was die Kommunikation erleichtert

Erzeugung von neuen Threads

  • Sehr einfach
    • Code eines Threads ist eine normal definierte Funktion, die wieder andere Funktionen aufrufen kann
    • werden von Systemaufrufen gestartet
      • Systemaufruf bekommt die Threadfunktion als Parameter übergeben

Threads implementieren

  • Threads sind i.d.R. im Kern implementiert, ähnlich wie Prozesse
  • Threads haben dieselben Zustände wie Prozesse, Bedeutung der Zustände ist identisch
  • Kann in vielen Programmiersprachen und Systemen realisiert werden
    • bspw. C, C++, C#, Java, Python, Swift, ...

Befehle mit POSIX API

  • pthread_create - Erzeugen eines Threads
  • pthread_exit - Beenden eines Threads
  • pthread_join - Warten auf Ende eines Threads
  • pthread_yield - Aufgaben der CPU

Fork-Join-Modell

  • Paradigma für die parallele Programmierung
    • Erstellen von Threads (fork) und Zusammenführen von Threads (join)
  • wird gerne in rekursiven Algorithmen verwendet
    • große Aufgabe kann in kleinere Teilaufgaben zerlegt werden
  • Jeder Thread kann sich auf eine Teilaufgabe konzentrieren
    • Ergebnisse werden die Ergebnisse kombiniert

image_157.png

FORK

Durch den Aufruf der Funktion fork() in einem Programm werden Threads ebenso wie der
gesamte Adressraum des Prozesses kopiert

Es entsteht eine exakte Kopie des aufrufenden Prozesses, einschließlich aller Threads und deren Zustände