1991 Stimmen

Was ist der Unterschied zwischen einem Prozess und einem Thread?

Was ist der technische Unterschied zwischen einem Prozess und einem Thread?

Ich habe das Gefühl, dass das Wort "Prozess" überstrapaziert wird und dass es auch Hardware- und Software-Threads gibt. Wie wäre es mit leichtgewichtigen Prozessen in Sprachen wie Erlang ? Gibt es einen definitiven Grund, den einen Begriff dem anderen vorzuziehen?

2 Stimmen

10 Stimmen

Es ist wahrscheinlich gerechtfertigt zu sagen, dass jedes Betriebssystem eine andere Vorstellung davon hat, was ein "Thread" oder "Prozess" ist. Einige gängige Betriebssysteme haben kein Konzept für "Threads", und es gibt auch einige eingebettete Betriebssysteme, die nur "Threads" haben.

4 Stimmen

TLDR: Geschwisterliche "Threads" (in den meisten Betriebssystemen) teilen sich den gleichen virtuellen Adressraum, die gleichen Sockets und offenen Dateien, alle gleichen Ressourcen. "Prozesse" hingegen sind voneinander isoliert/geschützt, und sie teilen nichts, es sei denn, sie fordern explizit die gemeinsame Nutzung bestimmter Dinge an. In einem Betriebssystem, das sowohl "Prozesse" als auch "Threads" hat, kann ein Prozess oft als Container für einen oder mehrere Threads und für alle Ressourcen, die sie gemeinsam nutzen, betrachtet werden.

1742voto

Greg Hewgill Punkte 882617

Sowohl Prozesse als auch Threads sind unabhängige Ausführungssequenzen. Der typische Unterschied besteht darin, dass Threads (desselben Prozesses) in einem gemeinsamen Speicherbereich ausgeführt werden, während Prozesse in getrennten Speicherbereichen ablaufen.

Ich bin mir nicht sicher, auf welche "Hardware"- bzw. "Software"-Threads Sie sich beziehen. Threads sind eine Funktion der Betriebsumgebung und keine Funktion der CPU (obwohl die CPU in der Regel über Operationen verfügt, die Threads effizient machen).

Erlang verwendet den Begriff "Prozess", weil es kein Multiprogramming-Modell mit gemeinsamem Speicher anbietet. Die Bezeichnung "Threads" würde implizieren, dass sie über gemeinsamen Speicher verfügen.

95 Stimmen

Hardware-Threads beziehen sich wahrscheinlich auf mehrere Thread-Kontexte innerhalb eines Kerns (z. B. HyperThreading, SMT, Niagara/Rock von Sun). Dies bedeutet u. a. doppelte Registerdateien, zusätzliche Bits, die mit dem Befehl durch die Pipelines transportiert werden, und eine komplexere Bypassing-/Weiterleitungslogik.

7 Stimmen

@greg, ich habe einen Zweifel in Bezug auf Threads. Nehmen wir an, ich habe einen Prozess A, der etwas Platz im RAM hat. Wenn der Prozess A einen Thread erstellt, braucht der Thread auch etwas Platz zum Ausführen. Wird also der Speicherplatz, der für Prozess A erstellt wird, vergrößert, oder der Speicherplatz für den Thread, der woanders erstellt wird? Was ist also der virtuelle Speicherplatz, den Prozess A erstellt? Bitte korrigieren Sie mich, wenn meine Frage falsch ist. Danke

12 Stimmen

@JeshwanthKumarNK: Beim Erstellen eines neuen Threads wird mindestens genügend Speicher für einen neuen Stack zugewiesen. Dieser Speicher wird vom Betriebssystem im Prozess A zugewiesen.

969voto

Scott Langham Punkte 55597

Prozess
Jeder Prozess stellt die für die Ausführung eines Programms erforderlichen Ressourcen bereit. Ein Prozess verfügt über einen virtuellen Adressraum, ausführbaren Code, offene Handles zu Systemobjekten, einen Sicherheitskontext, eine eindeutige Prozesskennung, Umgebungsvariablen, eine Prioritätsklasse, minimale und maximale Größen der Arbeitsgruppe und mindestens einen Ausführungsfaden. Jeder Prozess wird mit einem einzigen Thread gestartet, der oft als primärer Thread bezeichnet wird, kann aber aus jedem seiner Threads zusätzliche Threads erstellen.

Thema
Ein Thread ist eine Einheit innerhalb eines Prozesses, die für die Ausführung geplant werden kann. Alle Threads eines Prozesses teilen sich dessen virtuellen Adressraum und Systemressourcen. Darüber hinaus unterhält jeder Thread Ausnahmebehandler, eine Planungspriorität, einen lokalen Thread-Speicher, eine eindeutige Thread-Kennung und einen Satz von Strukturen, die das System verwendet, um den Thread-Kontext zu speichern, bis er geplant wird. Der Thread-Kontext umfasst die Maschinenregister des Threads, den Kernel-Stack, einen Thread-Umgebungsblock und einen Benutzer-Stack im Adressraum des Thread-Prozesses. Threads können auch ihren eigenen Sicherheitskontext haben, der für die Identifizierung von Clients verwendet werden kann.


Diese Informationen wurden in den Microsoft Docs hier gefunden: Über Prozesse und Threads

Microsoft Windows unterstützt präemptives Multitasking, das den Effekt der gleichzeitigen Ausführung mehrerer Threads von mehreren Prozessen erzeugt. Auf einem Multiprozessor-Computer kann das System gleichzeitig so viele Threads ausführen, wie es Prozessoren auf dem Computer gibt.

0 Stimmen

Lässt Threads hinzufügen, die meist vom Programmierer in der Speicherumgebung der virtuellen Maschine verwendet werden. aber die Prozessdomäne ist das Betriebssystem.

24 Stimmen

Für Leute, die wissen wollen, warum man eine Diskette nicht gleichzeitig formatieren kann: stackoverflow.com/questions/20708707/

1 Stimmen

Warum braucht jeder Prozess immer mindestens 1 Thread? was würde theoretisch passieren, wenn ein Prozess 0 Threads hätte?

345voto

Kumar Punkte 3401

Prozess:

  • Eine ausführende Instanz eines Programms wird als Prozess bezeichnet.
  • Einige Betriebssysteme verwenden den Begriff "Task" für ein Programm, das gerade ausgeführt wird.
  • Ein Prozess wird immer im Hauptspeicher gespeichert, der auch als Primärspeicher oder Direktzugriffsspeicher bezeichnet wird.
  • Daher wird ein Prozess als aktive Einheit bezeichnet. Er verschwindet, wenn der Rechner neu gebootet wird.
  • Einem Programm können mehrere Prozesse zugeordnet sein.
  • Auf einem Multiprozessorsystem können mehrere Prozesse parallel ausgeführt werden.
  • Auf einem Einprozessorsystem wird zwar keine echte Parallelität erreicht, aber es wird ein Prozessplanungsalgorithmus angewandt, und der Prozessor wird so geplant, dass er jeden Prozess einzeln ausführt, wodurch die Illusion der Gleichzeitigkeit entsteht.
  • Beispiel: Ausführen mehrerer Instanzen des Programms 'Calculator'. Jede der Instanzen wird als ein Prozess bezeichnet.

Thema:

  • Ein Thread ist eine Teilmenge des Prozesses.
  • Er wird als "leichtgewichtiger Prozess" bezeichnet, da er einem echten Prozess ähnelt, aber im Kontext eines Prozesses ausgeführt wird und die gleichen Ressourcen nutzt, die dem Prozess vom Kernel zugewiesen wurden.
  • Normalerweise hat ein Prozess nur einen Kontrollstrang - einen Satz von Maschinenanweisungen, die gleichzeitig ausgeführt werden.
  • Ein Prozess kann auch aus mehreren Ausführungssträngen bestehen, die gleichzeitig Anweisungen ausführen.
  • Mehrere Kontrollfäden können die echte Parallelität ausnutzen, die auf Multiprozessorsystemen möglich ist.
  • Auf einem Ein-Prozessor-System wird ein Thread-Scheduling-Algorithmus angewandt und der Prozessor wird so geplant, dass jeder Thread einzeln ausgeführt wird.
  • Alle Threads, die innerhalb eines Prozesses laufen, teilen sich denselben Adressraum, Dateideskriptoren, Stack und andere prozessbezogene Attribute.
  • Da sich die Threads eines Prozesses denselben Speicher teilen, gewinnt die Synchronisierung des Zugriffs auf die gemeinsam genutzten Daten innerhalb des Prozesses eine nie dagewesene Bedeutung.

Die obigen Informationen habe ich von der Blog Wissenssuche! .

113 Stimmen

Kumar: Meines Wissens nach teilen sich Threads nicht denselben Stack. Andernfalls wäre es nicht möglich, auf jedem von ihnen unterschiedlichen Code auszuführen.

38 Stimmen

Ja, ich glaube, @MihaiNeacsu hat recht. Threads teilen sich "Code, Daten und Dateien" und haben ihre eigenen "Register und Stack". Folie aus meinem OS-Kurs: i.imgur.com/Iq1Qprv.png

0 Stimmen

Dies ist sehr nützlich, da es erläutert, was Threads und Prozesse sind und wie sie sich zueinander verhalten. Ich würde vorschlagen, ein Beispiel für einen Thread hinzuzufügen, zumal es auch eines für einen Prozess gibt. Gut gemacht!

194voto

Robert S. Barnes Punkte 38141

Betrachten wir zunächst den theoretischen Aspekt. Sie müssen verstehen, was ein Prozess konzeptionell ist, um den Unterschied zwischen einem Prozess und einem Thread zu verstehen und was die beiden gemeinsam haben.

Wir haben folgendes in Abschnitt 2.2.2 Das klassische Fadenmodell von Moderne Betriebssysteme 3e von Tanenbaum:

Das Prozessmodell basiert auf zwei unabhängigen Konzepten: Ressourcen Gruppierung und Ausführung. Manchmal ist es sinnvoll, sie zu trennen; Hier kommen die Threads ins Spiel....

Er fährt fort:

Eine Möglichkeit, einen Prozess zu betrachten, ist, dass er eine Möglichkeit ist zusammenhängende Ressourcen zu gruppieren. Ein Prozess hat einen Adressraum der Programmtext und Daten sowie andere Ressourcen enthält. Diese Ressourcen können offene Dateien, Kindprozesse, anstehende Alarme Signalhandler, Buchhaltungsinformationen und vieles mehr. Indem man sie Indem man sie in Form eines Prozesses zusammenfasst, können sie leichter verwaltet werden. Das andere Konzept eines Prozesses ist ein Ausführungsstrang (thread of execution), gewöhnlich abgekürzt als Thread. Der Thread hat einen Programmzähler, der festhält der festhält, welche Anweisung als nächstes ausgeführt werden soll. Er hat Register, die seine aktuellen Arbeitsvariablen enthalten. Er hat einen Stack, der die Ausführungshistorie enthält, mit einem Rahmen für jede aufgerufene Prozedur, die noch nicht noch nicht zurückgegeben wurde. Obwohl ein Thread in einem Prozess ausgeführt werden muss, sind der Thread und sein Prozess sind unterschiedliche Konzepte und können getrennt behandelt werden. getrennt behandelt werden. Prozesse werden verwendet, um Ressourcen zusammenzufassen; Threads sind die Einheiten, die für die Ausführung auf der CPU vorgesehen sind.

Weiter unten finden Sie die folgende Tabelle:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Beschäftigen wir uns mit der Hardware-Multithreading Problem. Klassischerweise unterstützt eine CPU einen einzigen Ausführungsstrang (Thread), wobei der Zustand des Threads über eine einzige Programmzähler (PC), und eine Reihe von Registern. Aber was passiert, wenn ein Cache-Fehler auftritt? Es dauert lange, die Daten aus dem Hauptspeicher zu holen, und währenddessen sitzt die CPU einfach nur da und ist untätig. So kam jemand auf die Idee, im Grunde zwei Sätze von Thread-Status (PC + Register) zu haben, damit ein anderer Thread (vielleicht im selben Prozess, vielleicht in einem anderen Prozess) seine Arbeit erledigen kann, während der andere Thread auf den Hauptspeicher wartet. Es gibt mehrere Namen und Implementierungen dieses Konzepts, wie z.B. Hyperthreading y simultanes Multithreading (kurz: SMT).

Betrachten wir nun die Software-Seite. Es gibt grundsätzlich drei Möglichkeiten, wie Threads auf der Softwareseite implementiert werden können.

  1. Userspace-Threads
  2. Kernel-Threads
  3. Eine Kombination der beiden

Alles, was Sie für die Implementierung von Threads benötigen, ist die Fähigkeit, den CPU-Status zu speichern und mehrere Stapel zu verwalten, was in vielen Fällen im Userspace erfolgen kann. Der Vorteil von User-Space-Threads ist die superschnelle Thread-Umschaltung, da man nicht in den Kernel trappen muss, und die Möglichkeit, die Threads so zu planen, wie man es möchte. Der größte Nachteil ist die Unmöglichkeit, blockierende E/A durchzuführen (was den gesamten Prozess und alle seine Benutzer-Threads blockieren würde), was einer der Hauptgründe ist, warum wir überhaupt Threads verwenden. Die Blockierung von E/A mithilfe von Threads vereinfacht das Programmdesign in vielen Fällen erheblich.

Kernel-Threads haben den Vorteil, dass sie blockierende E/A verwenden können und alle Fragen der Zeitplanung dem Betriebssystem überlassen. Allerdings muss bei jedem Threadwechsel in den Kernel gewechselt werden, was potenziell relativ langsam ist. Wenn Sie jedoch wegen blockierter E/A zwischen den Threads wechseln, ist dies nicht wirklich ein Problem, da Sie durch die E/A-Operation wahrscheinlich ohnehin schon in den Kernel geraten sind.

Ein anderer Ansatz besteht darin, beide zu kombinieren, wobei mehrere Kernel-Threads jeweils mehrere Benutzer-Threads haben.

Um auf Ihre Frage nach der Terminologie zurückzukommen, können Sie sehen, dass ein Prozess und ein Ausführungsstrang zwei unterschiedliche Konzepte sind, und die Wahl des zu verwendenden Begriffs hängt davon ab, worüber Sie sprechen. Was den Begriff "leichtgewichtiger Prozess" angeht, so sehe ich persönlich keinen Sinn darin, da er nicht so gut vermittelt, was vor sich geht, wie der Begriff "Ausführungsstrang".

11 Stimmen

Hervorragende Antwort! Sie entlarvt eine Menge des Jargons und der Annahmen. Allerdings sticht diese Zeile als ungünstig hervor: "Jemand hatte also die Idee, im Grunde zwei Sätze von Thread-Status ( PC + Register ) zu haben" -- Was ist der "PC", auf den hier Bezug genommen wird?

7 Stimmen

@Smithers Der PC ist der Programmzähler bzw. Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls angibt: de.wikipedia.org/wiki/Programm_Zähler

1 Stimmen

Ich sehe, was Sie da gemacht haben. stackoverflow.com/questions/1762418/process-vs-thread/

159voto

Reachgoals Punkte 1933

Weitere Erläuterungen zur gleichzeitigen Programmierung

  1. Ein Prozess hat eine in sich geschlossene Ausführungsumgebung. Ein Prozess verfügt im Allgemeinen über einen vollständigen, privaten Satz grundlegender Laufzeitressourcen; insbesondere hat jeder Prozess seinen eigenen Speicherbereich.

  2. Threads existieren innerhalb eines Prozesses - jeder Prozess hat mindestens einen. Threads teilen sich die Ressourcen des Prozesses, einschließlich Speicher und geöffnete Dateien. Dies sorgt für eine effiziente, aber potenziell problematische, Kommunikation.

Ein Beispiel, das den Durchschnittsbürger vor Augen hat:

Öffnen Sie auf Ihrem Computer Microsoft Word und einen Webbrowser. Wir nennen diese beiden Prozesse .

In Microsoft Word geben Sie etwas ein und es wird automatisch gespeichert. Jetzt haben Sie festgestellt, dass das Bearbeiten und Speichern parallel abläuft - das Bearbeiten in einem Thread und das Speichern in einem anderen Thread.

18 Stimmen

Hervorragende Antwort, die die Dinge einfach hält und ein Beispiel liefert, mit dem sich jeder Nutzer, der die Frage überhaupt sieht, identifizieren kann.

10 Stimmen

Bearbeiten/Speichern war ein schönes Beispiel für mehrere Threads innerhalb eines Prozesses!

0 Stimmen

Vielleicht sind Bearbeiten und Speichern unterschiedliche Prozesse.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X