Was ist (wirklich) ein "Thread"?

236

Ich habe versucht, eine gute Definition zu finden und zu verstehen, was ein Thread wirklich ist.

Es scheint, dass mir etwas Offensichtliches fehlt, aber jedes Mal, wenn ich lese, was ein Thread ist, ist es fast eine zirkuläre Definition, a la "ein Thread ist ein Thread der Ausführung" oder "eine Möglichkeit, sich in laufende Aufgaben zu unterteilen". Äh, ähm. Huh?

Nach dem, was ich gelesen habe, ist ein Thread nicht wirklich etwas Konkretes, wie es ein Prozess ist. Es ist in der Tat nur ein Konzept. Soweit ich weiß, wie dies funktioniert, führt ein Prozessor einige Befehle für ein Programm aus (das als Ausführungsthread bezeichnet wurde ). Wenn er dann für eine Weile zur Verarbeitung für ein anderes Programm wechseln muss, speichert er den Status von Das Programm, für das es gerade ausgeführt wird (Thread Local Storage), und beginnt dann mit der Ausführung der Anweisungen des anderen Programms. Und hin und her. Ein Thread ist also eigentlich nur ein Konzept für "einen der Ausführungspfade" eines Programms, das gerade ausgeführt wird.

Im Gegensatz zu einem Prozess, der wirklich etwas ist - es ist ein Konglomerat von Ressourcen usw.

Als Beispiel für eine Definition, die mir nicht wirklich geholfen hat. . .

Aus Wikipedia :

"Ein Thread in der Informatik ist die Abkürzung für einen Ausführungsthread. Threads sind eine Möglichkeit für ein Programm, sich selbst in zwei oder mehr gleichzeitig (oder pseudo-gleichzeitig) laufende Aufgaben zu unterteilen (Threads und Prozesse werden von einer unterschieden) Betriebssystem zu einem anderen, aber im Allgemeinen ist ein Thread in einem Prozess enthalten, und verschiedene Threads im selben Prozess teilen sich dieselben Ressourcen, während verschiedene Prozesse im selben Multitasking-Betriebssystem dies nicht tun. "

Also habe ich recht? Falsch? Was ist ein Thread wirklich?

Edit: Anscheinend ein Thread auch einen eigenen Call - Stack gegeben, so dass ein wenig von einem Beton ist Sache .

Richard
quelle
6
"Prozess" ist nicht weniger ein abstrakter Begriff.
Hobbs
Ist der lokale Thread-Speicher nur der Aufrufstapel für den Thread?
committedandroider
1
Mögliches Duplikat von "implementiert Runnable" vs. "erweitert Thread"
VahidHoseini
3
Die Antworten unten sind ... abstrakt. Einfacher ausgedrückt (und einige Details beschönigend): Es war einmal ein Computerprogramm, das nur eines auf einmal tun konnte. Also tat es A, dann danach B, dann C, dann .... In modernen Systemen ist dies nicht ideal. Sie möchten beispielsweise weiterhin im Internet surfen, während Sie eine Datei herunterladen. Programme haben also jetzt einen oder mehrere "Threads". Jeder 'Thread' kann nur eine Sache gleichzeitig tun , aber verschiedene Threads können Dinge gleichzeitig tun . Thread 1 kann A, dann B und dann C ausführen. Thread 2 kann X, dann Y und dann Z ausführen. B kann erst starten, wenn A beendet ist, aber A und X können gleichzeitig auftreten.
Mohan
@Mohan das ist toll aber wie unterscheidet sich das von einem prozess?
Eric

Antworten:

152

Ein Thread ist ein unabhängiger Satz von Werten für die Prozessorregister (für einen einzelnen Kern). Da dies den Anweisungszeiger (auch Programmzähler genannt) enthält, steuert er, was in welcher Reihenfolge ausgeführt wird. Es enthält auch den Stapelzeiger, der besser auf einen eindeutigen Speicherbereich für jeden Thread verweist, da er sich sonst gegenseitig stört.

Threads sind die Softwareeinheit, die vom Steuerungsfluss betroffen ist (Funktionsaufruf, Schleife, goto), da diese Anweisungen auf dem Anweisungszeiger ausgeführt werden und zu einem bestimmten Thread gehören. Threads werden häufig nach einem bestimmten Priorisierungsschema geplant (obwohl es möglich ist, ein System mit einem Thread pro Prozessorkern zu entwerfen. In diesem Fall wird jeder Thread immer ausgeführt und es ist keine Planung erforderlich).

Tatsächlich reicht der Wert des Anweisungszeigers und der an dieser Stelle gespeicherten Anweisung aus, um einen neuen Wert für den Anweisungszeiger zu bestimmen. Bei den meisten Anweisungen wird die IP lediglich um die Größe der Anweisung erhöht, bei Steuerflussanweisungen wird die IP jedoch auf andere, vorhersehbare Weise geändert. Die Folge von Werten, die die IP annimmt, bildet einen Ausführungspfad, der sich durch den Programmcode schlängelt und den Namen "Thread" hervorbringt.

Ben Voigt
quelle
10
+1. Ein Thread ist nichts "Konkreteres" als eine Reihe von Registerwerten.
Greg Hewgill
6
Welche "Menge von Werten"? Was sind Sie? Wie definieren sie einen Thread ?
Richard
20
@Richard: Die genaue Liste der CPU-Register hängt von der Architektur ab, aber Befehlszeiger und Stapelzeiger sind ziemlich universell. Sie definieren einen Faden soweit wenn dieser Faden (Satz von Registerwerten) in dem Prozessorkern geladen wird, wird der Faden läuft . Der Prozessor ruft vom Thread angeforderte Anweisungen ab und aktualisiert die Thread-Register. Wenn ein Kontextwechsel benötigt wird, speichert der Prozessor diesen Satz von Registerwerten im Speicher und lädt einen Satz, der zu einem anderen Thread gehört, typischerweise als Teil der Interrupt-Wartungslogik.
Ben Voigt
4
Danke Ben. Das ist sehr hilfreich.
Richard
2
Hallo danke @BenVoigt. Ein paar Klarstellungen, über die Noobs wie ich stolpern könnten: Was ist mit "Prozessorregistern" gemeint? Was ist mit "Anweisungszeiger" und "Stapelzeiger" gemeint?
BKSpurgeon
214

Ein Thread ist ein Ausführungskontext. Dies sind alle Informationen, die eine CPU benötigt, um einen Befehlsstrom auszuführen.

Angenommen, Sie lesen ein Buch und möchten gerade eine Pause einlegen, möchten aber in der Lage sein, genau an dem Punkt, an dem Sie aufgehört haben, wieder zu lesen. Eine Möglichkeit, dies zu erreichen, besteht darin, die Seitenzahl, die Zeilennummer und die Wortnummer aufzuschreiben. Ihr Ausführungskontext zum Lesen eines Buches sind also diese 3 Zahlen.

Wenn Sie eine Mitbewohnerin haben und sie dieselbe Technik anwendet, kann sie das Buch nehmen, während Sie es nicht verwenden, und das Lesen dort fortsetzen, wo sie aufgehört hat. Dann können Sie es zurücknehmen und von Ihrem Standort aus fortsetzen.

Threads funktionieren auf die gleiche Weise. Eine CPU gibt Ihnen die Illusion, dass sie mehrere Berechnungen gleichzeitig durchführt. Dies geschieht, indem für jede Berechnung etwas Zeit aufgewendet wird. Dies ist möglich, da für jede Berechnung ein Ausführungskontext vorhanden ist. So wie Sie ein Buch mit Ihrem Freund teilen können, können viele Aufgaben eine CPU teilen.

Auf einer technischeren Ebene besteht ein Ausführungskontext (daher ein Thread) aus den Werten der CPU-Register.

Zuletzt: Threads unterscheiden sich von Prozessen. Ein Thread ist ein Ausführungskontext, während ein Prozess eine Reihe von Ressourcen ist, die einer Berechnung zugeordnet sind. Ein Prozess kann einen oder mehrere Threads haben.

Erläuterung: Zu den einem Prozess zugeordneten Ressourcen gehören Speicherseiten (alle Threads in einem Prozess haben dieselbe Ansicht des Speichers), Dateideskriptoren (z. B. offene Sockets) und Sicherheitsanmeldeinformationen (z. B. die ID des Benutzers, der den Prozess gestartet hat) Prozess).

pwnall
quelle
20
Eine bessere Analogie würde Person mit CPU gleichsetzen (beide tun etwas) und Buch mit Adressraum gleichsetzen (beide existieren einfach). Auf diese Weise sind Lesezeichen in verschiedenen Büchern wie Threads in verschiedenen Prozessen. Ein einzelnes Buch mit mehr als einem Lesezeichen wäre das Analogon eines Multithread-Prozesses, was die Leute normalerweise meinen, wenn sie "Threads" sagen. Es funktioniert für einen einzelnen Prozessor, bricht jedoch etwas zusammen, wenn Sie über Multi-Processing sprechen. Es interessiert niemanden, welche CPU die Funktion f () ausführt, aber es spielt keine Rolle, welche Person Kapitel 11 liest.
Solomon Slow
@pwnall, vielen Dank, dass du schwierige Konzepte für andere wie mich verdaut hast! Ist Multithreading an Multiprocessing beteiligt (oder wird ein Prozess auf vielen CPUs parallel ausgeführt, falls ich den falschen Begriff verwende)?
Aerijman
51

Um einen Thread formal zu definieren, müssen wir zuerst die Grenzen verstehen, an denen ein Thread arbeitet.

Ein Computerprogramm wird zu einem Prozess, wenn es aus einem Speicher in den Arbeitsspeicher des Computers geladen wird und mit der Ausführung beginnt. Ein Prozess kann von einem Prozessor oder einer Reihe von Prozessoren ausgeführt werden. Eine Prozessbeschreibung im Speicher enthält wichtige Informationen wie den Programmzähler, der die aktuelle Position im Programm verfolgt (dh welche Anweisung gerade ausgeführt wird), Register, Variablenspeicher, Dateihandles, Signale usw.

Ein Thread ist eine Folge solcher Anweisungen innerhalb eines Programms, die unabhängig von anderem Code ausgeführt werden können. Die Abbildung zeigt das Konzept: Geben Sie hier die Bildbeschreibung ein

Threads befinden sich im selben Prozessadressraum , sodass ein Großteil der in der Speicherbeschreibung des Prozesses enthaltenen Informationen von Threads gemeinsam genutzt werden kann.

Einige Informationen können nicht repliziert werden, z. B. der Stapel (Stapelzeiger auf einen anderen Speicherbereich pro Thread), Register und threadspezifische Daten. Diese Informationen reichen aus, um Threads unabhängig vom Hauptthread des Programms und möglicherweise einem oder mehreren anderen Threads innerhalb des Programms planen zu können .

Für die Ausführung von Multithread-Programmen ist eine explizite Betriebssystemunterstützung erforderlich. Glücklicherweise unterstützen die meisten modernen Betriebssysteme Threads wie Linux (über NPTL), BSD-Varianten, Mac OS X, Windows, Solaris, AIX, HP-UX usw. Betriebssysteme verwenden möglicherweise unterschiedliche Mechanismen, um Multithreading-Unterstützung zu implementieren.

Hier wird das Konzept grafisch dargestellt.

Hier finden Sie weitere Informationen zum Thema. Das war auch meine Informationsquelle.

Lassen Sie mich nur einen Satz aus der Einführung in das eingebettete System von Edward Lee und Seshia hinzufügen :

Threads sind wichtige Programme, die gleichzeitig ausgeführt werden und sich einen Speicherplatz teilen. Sie können auf die Variablen der anderen zugreifen. Viele Praktiker auf diesem Gebiet verwenden den Begriff „Threads“ enger, um sich auf bestimmte Arten der Erstellung von Programmen zu beziehen, die Speicher gemeinsam nutzen, [andere], um allgemein auf jeden Mechanismus zu verweisen, bei dem zwingende Programme gleichzeitig ausgeführt werden und Speicher gemeinsam nutzen. In diesem weiten Sinne existieren Threads in Form von Interrupts auf fast allen Mikroprozessoren, auch ohne Betriebssystem (Bare Iron).

Leos313
quelle
45

Prozesse sind wie zwei Personen, die zwei verschiedene Computer verwenden und das Netzwerk verwenden, um bei Bedarf Daten gemeinsam zu nutzen. Threads sind wie zwei Personen, die denselben Computer verwenden und keine expliziten Daten freigeben müssen, sondern sich sorgfältig abwechseln müssen.

Konzeptionell sind Threads nur mehrere Arbeiterbienen, die im selben Adressraum herumschwirren. Jeder Thread hat einen eigenen Stapel, einen eigenen Programmzähler usw., aber alle Threads in einem Prozess teilen sich den gleichen Speicher. Stellen Sie sich zwei Programme vor, die gleichzeitig ausgeführt werden, aber beide auf dieselben Objekte zugreifen können.

Vergleichen Sie dies mit Prozessen. Prozesse haben jeweils einen eigenen Adressraum, dh ein Zeiger in einem Prozess kann nicht verwendet werden, um auf ein Objekt in einem anderen zu verweisen (es sei denn, Sie verwenden gemeinsam genutzten Speicher).

Ich denke, die wichtigsten Dinge, die zu verstehen sind, sind:

  • Sowohl Prozesse als auch Threads können "gleichzeitig ausgeführt" werden.
  • Prozesse teilen sich nicht den Speicher (standardmäßig), aber Threads teilen den gesamten Speicher mit anderen Threads im selben Prozess.
  • Jeder Thread in einem Prozess hat einen eigenen Stapel und einen eigenen Befehlszeiger.
Joey Adams
quelle
Sie sagen, dass "Prozesse nichts gemeinsam nutzen (standardmäßig)", aber in Ihrer Analogie geben Sie an, dass "Prozesse wie zwei Personen sind, die zwei verschiedene Computer verwenden und das Netzwerk verwenden, um bei Bedarf Daten gemeinsam zu nutzen". Also teilen sie etwas?
committedandroider
@committedandroider: Guter Anruf. Ich habe meine Antwort so bearbeitet, dass Prozesse nicht (standardmäßig) Speicher gemeinsam nutzen , Threads jedoch den gesamten Speicher.
Joey Adams
36

Ich werde viel Text aus dem Buch Operating Systems Concepts von ABRAHAM SILBERSCHATZ, PETER BAER GALVIN und GREG GAGNE zusammen mit meinem eigenen Verständnis der Dinge verwenden.

Prozess

Jede Anwendung befindet sich in Form von Text (oder Code) auf dem Computer.

Wir betonen, dass ein Programm an sich kein Prozess ist. Ein Programm ist eine passive Entität, z. B. eine Datei mit einer Liste von Anweisungen, die auf der Festplatte gespeichert sind (häufig als ausführbare Datei bezeichnet).

Wenn wir eine Anwendung starten, erstellen wir eine Ausführungsinstanz. Diese Ausführungsinstanz wird als Prozess bezeichnet. EDIT: (Gemäß meiner Interpretation, analog zu einer Klasse und einer Instanz einer Klasse, wobei die Instanz einer Klasse ein Prozess ist.)

Ein Beispiel für Prozesse ist Google Chrome. Wenn wir Google Chrome starten, werden 3 Prozesse erzeugt:

• Das Browserprozess ist für die Verwaltung der Benutzeroberfläche sowie der Festplatten- und Netzwerk-E / A verantwortlich. Beim Starten von Chrome wird ein neuer Browserprozess erstellt. Es wird nur ein Browserprozess erstellt.

• • Renderer- Prozesse enthalten Logik zum Rendern von Webseiten. Daher enthalten sie die Logik für den Umgang mit HTML, Javascript, Bildern usw. In der Regel wird für jede in einem neuen Tab geöffnete Website ein neuer Rendererprozess erstellt, sodass möglicherweise mehrere Rendererprozesse gleichzeitig aktiv sind.

• Für jeden verwendeten Plug-In-Typ (z. B. Flash oder QuickTime) wird ein Plug-In- Prozess erstellt. Plug-In-Prozesse enthalten den Code für das Plug-In sowie zusätzlichen Code, mit dem das Plug-In mit den zugehörigen Renderer-Prozessen und dem Browser-Prozess kommunizieren kann.

Faden

Um dies zu beantworten, sollten Sie zunächst wissen, was ein Prozessor ist. Ein Prozessor ist die Hardware, die die Berechnungen tatsächlich ausführt. BEARBEITEN: (Berechnungen wie das Hinzufügen von zwei Zahlen, das Sortieren eines Arrays und das Ausführen des geschriebenen Codes)

Fahren Sie nun mit der Definition eines Threads fort.

Ein Thread ist eine Grundeinheit der CPU-Auslastung . Es umfasst eine Thread-ID, einen Programmzähler, einen Registersatz und einen Stapel.

EDIT: Definition eines Threads von der Intel-Website:

Ein Thread oder Thread der Ausführung ist ein Softwarebegriff für die grundlegende geordnete Folge von Anweisungen, die von einem einzelnen CPU-Kern durchlaufen oder verarbeitet werden können.

Wenn der Renderer-Prozess in der Chrome-Anwendung ein Array von Zahlen sortiert, erfolgt die Sortierung nach einem Thread / Thread der Ausführung. (Die Grammatik in Bezug auf Threads scheint mir verwirrend)

Meine Interpretation der Dinge

Ein Prozess ist eine Ausführungsinstanz. Threads sind die eigentlichen Worker, die die Berechnungen über den CPU-Zugriff durchführen. Wenn für einen Prozess mehrere Threads ausgeführt werden, stellt der Prozess gemeinsamen Speicher bereit.

BEARBEITEN: Andere Informationen, die ich nützlich fand, um mehr Kontext zu geben

Alle modernen Computer haben mehr als einen Thread. Die Anzahl der Threads in einem Computer hängt von der Anzahl der Kerne in einem Computer ab.

Concurrent Computing :

Aus Wikipedia:

Concurrent Computing ist eine Form des Rechnens, bei der mehrere Berechnungen in überlappenden Zeiträumen - gleichzeitig - statt nacheinander ausgeführt werden (eine wird vor dem nächsten abgeschlossen). Dies ist eine Eigenschaft eines Systems - dies kann ein einzelnes Programm, ein Computer oder ein Netzwerk sein - und es gibt einen separaten Ausführungspunkt oder "Kontrollthread" für jede Berechnung ("Prozess").

Also könnte ich ein Programm schreiben, das die Summe von 4 Zahlen berechnet:

(1 + 3) + (4 + 5)

In dem Programm zur Berechnung dieser Summe (dies ist ein Prozess, der auf einem Ausführungsthread ausgeführt wird) kann ich einen anderen Prozess aufteilen, der auf einem anderen zu berechnenden Thread ausgeführt werden kann (4 + 5) und das Ergebnis an den ursprünglichen Prozess zurückgeben, während der Der ursprüngliche Prozess berechnet die Summe von (1 + 3).

chatuur
quelle
5
Das ist die echte Antwort
Suhail Mumtaz Awan
1
Hat mir sehr geholfen. So sieht die Erklärung aus.
Dinesh Kumar
Ein großer Wert dieser Antwort ist, dass sie ein Nachschlagewerk enthält, in dem Sie bei Bedarf weitere Details finden. Danke @chatuur!
Desa
7

Leider existieren Threads. Ein Faden ist etwas Greifbares. Sie können einen töten, und die anderen rennen weiter. Sie können neue Threads erzeugen. Obwohl jeder Thread kein eigener Prozess ist, werden sie innerhalb des Prozesses separat ausgeführt. Auf Multi-Core-Computern können 2 Threads gleichzeitig ausgeführt werden.

http://en.wikipedia.org/wiki/Simultaneous_multithreading

http://www.intel.com/intelpress/samples/mcp_samplech01.pdf

Orbit
quelle
1
Was macht es "etwas Greifbares"? Sind es nur die Daten, die im TLS und seinem Aufrufstapel gespeichert sind?
Richard
Dass es nicht nur eine Abstraktion zum Verständnis ist ... Wenn es wirklich nur ein einzelner Thread wäre, der sich als mehrere Threads tarnt, wäre das OP richtig, aber ja, ich würde sagen, dass diese Daten es greifbar machen würden .
Orbit
Kläre mich auf . . . Was ist die Antwort?
Richard
@ Richard wollte nicht in eine Debatte über Semantik geraten, sondern formulierte nur meine Antwort, um zu versuchen, das OP konzeptionell zu klären.
Orbit
@richard was ist das TLS?
committedandroider
6

Ein Thread ist nichts anderes als ein Speicherkontext (oder wie Tanenbaum es besser ausdrückt, Ressourcengruppierung) mit Ausführungsregeln. Es ist ein Software-Konstrukt. Die CPU hat keine Ahnung, was ein Thread ist (einige Ausnahmen hier, einige Prozessoren haben Hardware-Threads), sie führt nur Anweisungen aus.

Der Kernel führt das Thread- und Prozesskonzept ein, um die Speicher- und Anweisungsreihenfolge auf sinnvolle Weise zu verwalten.

Valentin Radu
quelle
5

Dies wurde aus einer Yahoo-Antwort entnommen:

Ein Thread ist ein Codierungskonstrukt, das von der Architektur einer Anwendung nicht beeinflusst wird. Ein einzelner Prozess kann häufig mehrere Threads enthalten. Threads können auch direkt miteinander kommunizieren, da sie dieselben Variablen verwenden.

Prozesse sind unabhängige Ausführungseinheiten mit eigenen Statusinformationen. Sie verwenden auch ihre eigenen Adressräume und können nur über Interprozess-Kommunikationsmechanismen mit anderen Prozessen interagieren.

Einfacher ausgedrückt sind Threads jedoch wie verschiedene "Aufgaben". Denken Sie also daran, wenn Sie etwas tun, zum Beispiel, schreiben Sie eine Formel auf ein Papier. Das kann als ein Thread betrachtet werden. Dann schreiben Sie in einem anderen Thread etwas anderes auf ein anderes Blatt Papier. Hier kommt Multitasking ins Spiel.

Intel-Prozessoren sollen "Hyper-Threading" haben (AMD hat es auch) und es soll in der Lage sein, mehrere "Threads" oder Multitasking viel besser auszuführen.

Ich bin mir nicht sicher, wie ein Thread logistisch gehandhabt wird. Ich erinnere mich, dass ich gehört habe, dass der Prozessor zwischen ihnen hin und her geht, aber ich bin mir nicht 100% sicher, und hoffentlich kann jemand anderes darauf antworten.

Flipper
quelle
Wie gehen Intel-Prozessoren besser mit mehreren Threads um? Bei einem einzelnen Kern sollte jeweils nur ein Thread ausgeführt werden. Ich bin damit einverstanden, dass der Prozessor hin und her geht. Das kannst du doch nicht besser machen, oder?
committedandroider
Diese Optimierung bietet in einigen Anwendungsfällen eine bessere Leistung. Sie können über Hyper-Threading hier lesen: en.wikipedia.org/wiki/Hyper-threading
Jeremy Friesner
5

Die Antwort ist je nach System und Implementierung sehr unterschiedlich, aber die wichtigsten Teile sind:

  1. Ein Thread hat einen unabhängigen Ausführungsthread (dh Sie können den Kontext von ihm weg und dann zurück wechseln, und er wird dort fortgesetzt, wo er war).
  2. Ein Thread hat eine Lebensdauer (er kann von einem anderen Thread erstellt werden und ein anderer Thread kann warten, bis er beendet ist).
  3. Es hat wahrscheinlich weniger Gepäck als ein "Prozess".

Darüber hinaus könnten Threads innerhalb eines einzelnen Prozesses durch eine Sprachlaufzeit implementiert werden, Threads könnten Coroutinen sein, Threads könnten innerhalb eines einzelnen Prozesses durch eine Threading-Bibliothek implementiert werden oder Threads könnten ein Kernel-Konstrukt sein.

In mehreren modernen Unix-Systemen, einschließlich Linux, mit dem ich am besten vertraut bin, alles Threads - ein Prozess ist lediglich eine Art Thread, der relativ wenige Dinge mit seinem übergeordneten Element teilt (dh er erhält seine eigenen Speicherzuordnungen, seine eigene Dateitabelle und Berechtigungen usw.) Das Lesen man 2 clone, insbesondere die Liste der Flags, ist hier wirklich lehrreich.

Hobbs
quelle
Wechselt ein Kontext nur, wenn der Prozessor von einem Thread zum anderen wechselt (ob im selben oder im anderen Prozess)?
committedandroider
-1

Ich bin mit keiner dieser Antworten wirklich zufrieden, daher werde ich hier meine eigene hinzufügen :) Ein Thread ist eine Kernel-Abstraktion zum Planen der Arbeit am Prozessor. Ein Thread ist das, was der Kernel Ihnen zum Verwalten der Prozessorzeit gibt und Arbeit mit anderen teilen

Ion Todirel
quelle
1
-1 Threads müssen nicht vom Kernel erstellt werden. Threads mit Unterstützung auf Kernel-Ebene werden tatsächlich vom Kernel geplant (wo eine Art Syscall ausgegeben wird). Es gibt jedoch auch Threads mit Unterstützung auf Benutzerbibliotheksebene, wobei sich die Thread-Tabelle im Benutzerbereich befindet.
AleksandrH
-1

Lassen Sie mich zunächst den Unterschied zwischen Prozess und Threads erklären.

Ein Prozess kann eine {1..N} Anzahl von Threads haben. Eine kleine Erklärung zum virtuellen Speicher und zum virtuellen Prozessor.

Virtueller Speicher

Wird als Auslagerungsbereich verwendet, damit ein Prozess denkt, dass er zur Ausführung im Primärspeicher gespeichert ist.

Virtueller Prozessor

Das gleiche Konzept wie der virtuelle Speicher, außer dass dies für den Prozessor gilt. Für einen Prozess sieht es so aus, als wäre es das einzige, was den Prozessor verwendet.

Das Betriebssystem kümmert sich darum, den virtuellen Speicher und den virtuellen Prozessor einem Prozess zuzuweisen und den Austausch zwischen Prozessen und die Ausführung durchzuführen.

Alle Threads innerhalb eines Prozesses teilen sich denselben virtuellen Speicher. Jedem Thread wird jedoch ein individueller virtueller Prozessor zugewiesen, damit er einzeln ausgeführt werden kann.

Dies spart den Speicher und nutzt die CPU optimal aus.

Balaji Radhakrishnan
quelle