· 

Unterschiede Prozesse und Threads

1. Einführung

Im Kontext von Betriebssystemen tauchen zwei Begriffe immer wieder auf: Prozesse und Threads. Auf Rechnern mit mehreren Prozessoren (sogenannte SMP-Syteme) können mehrere Tasks gleichzeitig ausgeführt werden. Damit sich diese nicht in die Quere kommen, ist die Synchronisation einzelner Threads essentiell. Doch was genau versteht man unter einem Thread und was ist ein Prozess?

Ein Prozess ist die Ausführung eines Programms mit einer bestimmten Eingabe auf einer konkreten Rechenanlage mit einem konkreten Betriebssystem und liefert eine durch das Programm und die Eingabe bestimmte Ausgabe.

Den Begriff Thread kennt man vielleicht aus Internetforen. In der Informatik meint man damit eigenständig ablaufende Teile eines Prozesses, die unabhängig von anderen Prozessteilen abgewickelt werden. Ein Prozess besteht somit also aus (mindestens) einem Thread. Wenn du z. B. Netflix schaust, dann wird das Programm zum Streamen in einem Prozess ausgeführt, während innerhalb dieses Prozesses Teilaufgaben (z. B. die Übertragung des Videos, die Verarbeitung der Nutzereingaben im Player und die allgemeine Kommunikation mit dem Server) ausgeführt werden. Insbesondere in verteilten Systemen spielen Threads eine wichtige Rolle. Alle Threads eines Prozesses teilen sich denselben Adressraum, d. h. sie führen dasselbe Programm aus und teilen sich alle dieselben globalen Variablen. Wie Prozesse können auch Threads eine Priorität besitzen, nach der sie vorrangig (oder eben nachrangig) ausgeführt werden.

Wenn ein Prozessor mehrere Kerne besitzt, können Threads echt parallel arbeiten. Andernfalls wird einem durch ständige Kontextwechsel eine Parallelität nur vorgegaukelt.

 


2. Unterschiede zwischen Prozessen und Threads

Worin bestehen aber nun die genauen Unterschiede zwischen Prozessen und Threads?

Der wesentliche Unterschied zwischen Threads und Prozessen ist, dass Prozesse über einen eigenen Speicherbereich verfügen, während sich alle zu diesem Prozess gehörenden Threads den (Prozess-)Speicherbereich teilen. Außerdem besteht (wie bereits erwähnt) ein Prozess aus (mindestens) einem Thread. Prozesse werden also in einen oder mehrere Threads aufgeteilt.

Threads besitzen noch weitere Eigenschaften, die sich von Prozessen unterscheiden:

  • Man bezeichnet Threads auch als leichtgewichtige Prozesse, da sie weitaus weniger Kontext-Informationen besitzen.

  • Threads sind die Einheiten, die gescheduled werden, d. h. den einzelnen Threads eines Prozesses wird die CPU zugewiesen und dort findet dann die Abarbeitung der Aufgaben des Prozesses durch die Threads statt. Ein Thread ist also die ausführbare Einheit eines Prozesses.

    ###FürYouTube => Wie genau die Zuweisung stattfindet, z.B. RR

  • Jeder Thread hat einen separaten User-Mode- und Kernel-Mode-Stack.
  • Jeder Thread besitzt einen eigenen Stack mit lokalen Variablen. Demgegenüber werden die globalen Variablen eines Prozesses mit allen Threads geteilt.
  • Jeder Thread besitzt unterschiedliche Sets an Registerinhalten.

3. Unterteilung von Prozessen in Threads

Welche Vorteile kann es haben, wenn man einen Prozess in mehrere Threads unterteilt? 

  • Auf SMP-Systemen können mehrere Threads gleichzeitig aktiv sein (Parallelisierung, schnellere Prozessausführung).
  • Man kann das Shared-Memory-Programmiermodell auf Multiprozessorsystemen anwenden und so Programme architektonisch sauber aufziehen. Durch die Nutzung eines gemeinsamen Speichers können schnelle Interprozesskommunikationen realisiert werden. Threads eines Prozesses teilen sich einen gemeinsamen Adressraum und können Daten einfach gemeinsam nutzen (Shared Data). Hierfür ist aber ein hinreichendes Maß an Synchronisation notwendig, weil es sonst zu sogenannten Race-Conditions (wie etwa inkonsistenten Daten) kommen kann.
  • Die Struktur von Programmen kann hierdurch vereinfacht werden (z. B. durch Server-Programme, die diverse Client Requests handlen und bei denen jeder Client einen Thread zugeteilt bekommt).
  • Da Threads leichtgewichtige Prozesse sind, können Kontextwechsel zwischen Threads leichter als bei Prozessen realisiert werden.
  • Jedem Thread kann individuell eine bestimmte Rechenzeit zugeteilt werden.