"Kann man das essen?", ist eine beliebte Frage für unbekanntes. "Nein", weder Threads noch Prozesse sind essbar, zumindest nicht für den Menschen. Für den Computer sind es Arbeitsanweisungen. Der Unterschied zwischen beiden ist ihr Umfang. Ein Prozess ist ein sich in Ausführung befindliches Programm. In einem Prozess existieren einer oder mehrere Threads.
Ein Prozess ist ein Programm in Ausführung
Im Gegensatz zum Schauplatz vor Gericht gibt es bei einem Prozess keine Verurteilung. Es gibt die Stati "bereit", "in Ausführung" und "wartend". Die Kenner von Linux und Unix wissen, dass es eine Unterscheidung zwischen Kernel- und Userspace gibt, aber für das Kernverständnis reichen die drei Stati. Wenn man als Benutzer ein Programm startet, dann wird ein Prozess angelegt, der für die Abarbeitung der Befehle, die das Programm ausmachen, verantwortlich ist. Der Prozess erhält den Status "bereit".
Wenn der Prozess die CPU zugewiesen bekommt, damit er die Befehle abarbeiten kann, also dem Benutzer zum Beispiel ein neues, leeres Worddokument anzeigen soll, dann hat er den Status "in Ausführung". Entzieht der Scheduler dem Prozess die CPU, kehrt er in den Status "bereit" zurück. Der Status "wartend" wird betreten, wenn der Prozess auf eine Benutzereingabe wartet, weil er ohne sie nicht weiter arbeiten kann. Das geschieht, wenn der Benutzer sein Worddokument speichern will. Dann muss der Prozess warten, bis der Benutzer einen Namen für das neue Dokument festgelegt hat. Ist das geschehen, kehrt der Prozess in den Status "bereit" zurück.
Ein Prozess belegt Speicherraum und bekommt vom Betriebssystem Betriebsmittel zugeordnet. Darum ist es für das Betriebssystem ein teurer Vorgang, wenn es einen Prozesswechsel in der CPU vornimmt. Im Gegensatz dazu wird ein Thread gerne als Leichtgewicht-Prozess beschrieben. Ein Thread teilt sich die Betriebsmittel seines Prozesses mit den anderen zum Prozess gehörenden Threads und greift mit ihnen auf den gleichen Speicherbereich zu.
Threads sind abhängig vom Prozess
Damit ist klar, dass ein Thread immer an einen Prozess gebunden ist und nicht unabhängig von ihm existieren kann. Threads sind für sich gesehen Abfolgen von Befehlen, die parallel ausgeführt werden können. Ein einfaches Beispiel dafür ist folgende Berechnung: (2+4) * (5-3+8) = ? Die Terme, die in Klammern stehen, müssen ausgerechnet werden, bevor die Multiplikation erfolgen kann. Die Terme sind nicht voneinander abhängig und können daher in zwei Threads ausgerechnet werden.
Jeder Thread hat einen eigenen Programmcounter und einen Stack für lokale Daten, zum Beispiel Zwischenergebnisse. Im obigen Beispiel müsste der zweite Thread dort das Ergebnis von 5-3 ablegen und dann 2+8 rechnen. Außerdem hat jeder Thread eine Kopie des Prozessorregisters. Gemeinsam genutzt wird der Adressraum. Er beinhaltet den Programmcode, globale Daten und der Ablageort für die Daten über die Zustände des Prozesses.
Aus Sicht des Betriebssystems und aus den Zeiten der Multitasking-Betriebssysteme existiert der Begriff "Task" als Synonym für "Thread". Es ist jedoch nicht klar definiert und wird für andere Aufgaben ebenfalls verwendet.
Eine Fiber aus Sicht der Anwendungssoftware
Die Begriffe Prozess und Thread werden beide aus der Sicht des Betriebssystems geprägt. Die Fiber oder zu Deutsch Faser wird aus der Sicht der Software definiert. Sie beschreibt die Möglichkeit, einen Thread, aus Sicht des Programmierers, in weitere, einzelne Fasern zu zerteilen.
Threads und Prozesse sind folglich nicht essbar. In Kombination mit der Faser und einer fähigen Programmierung können Sie für den Prozessor ein schmackhaftes Menü ergeben, welches die Reaktionszeit der Anwendungs-Software für den Benutzer senkt. Das ist dann der Fall, wenn die vom Betriebssystem bereit gestellten Ressourcen optimal genutzt werden.
