Frage 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, ein Wort wie "Prozess" wird überstrapaziert und es gibt auch Hardware- und Software-Threads. Wie wäre es mit leichten Prozessen in Sprachen wie Erlang? Gibt es einen definitiven Grund, einen Begriff gegenüber dem anderen zu verwenden?


1225
2017-10-14 09:13


Ursprung


Antworten:


Beide Prozesse und Threads sind unabhängige Ausführungssequenzen. Der typische Unterschied besteht darin, dass Threads (des gleichen Prozesses) in einem gemeinsamen Speicherbereich ausgeführt werden, während Prozesse in separaten Speicherbereichen ausgeführt werden.

Ich bin mir nicht sicher, welche "Hardware" vs "Software" Threads Sie möglicherweise beziehen. Threads sind eher eine Betriebsumgebungsfunktion als eine CPU-Funktion (obwohl die CPU in der Regel über Operationen verfügt, die Threads effizient machen).

Erlang verwendet den Begriff "Prozess", weil er kein Shared-Memory-Multiprogramming-Modell verfügbar macht. Wenn Sie sie "Threads" nennen, würde dies bedeuten, dass sie Speicher gemeinsam haben.


1111
2017-10-14 09:15



Verarbeiten
Jeder Prozess stellt die Ressourcen bereit, die zum Ausführen eines Programms benötigt werden. Ein Prozess hat einen virtuellen Adressraum, ausführbaren Code, offene Handles für Systemobjekte, einen Sicherheitskontext, eine eindeutige Prozesskennung, Umgebungsvariablen, eine Prioritätsklasse, minimale und maximale Arbeitssatzgrößen und mindestens einen Ausführungsthread. Jeder Prozess wird mit einem einzelnen Thread gestartet, der oft als primärer Thread bezeichnet wird. Er kann jedoch zusätzliche Threads aus beliebigen Threads erstellen.

Faden
Ein Thread ist eine Entität innerhalb eines Prozesses, die zur Ausführung geplant werden kann. Alle Threads eines Prozesses teilen sich den virtuellen Adressraum und die Systemressourcen. Darüber hinaus behält jeder Thread Ausnahmehandler, eine Planungspriorität, lokalen Thread-Speicher, eine eindeutige Thread-Kennung und eine Gruppe von Strukturen bei, die das System verwendet, um den Threadkontext zu speichern, bis er geplant wird. Der Threadkontext enthält den Satz von Maschinenregistern des Threads, den Kernelstapel, einen Threadumgebungsblock und einen Benutzerstapel im Adressraum des Threadprozesses. Threads können auch ihren eigenen Sicherheitskontext haben, der für die Identität von Clients verwendet werden kann.


Gefunden auf MSDN hier:
Über Prozesse und Threads 

Microsoft Windows unterstützt präemptives Multitasking, das die gleichzeitige Ausführung mehrerer Threads aus mehreren Prozessen bewirkt. Auf einem Multiprozessorcomputer kann das System gleichzeitig so viele Threads ausführen, wie Prozessoren auf dem Computer vorhanden sind.


634
2017-10-14 09:43



Verarbeiten:

  • Eine ausführende Instanz eines Programms wird als Prozess bezeichnet.
  • Einige Betriebssysteme verwenden den Begriff "Task", um auf ein Programm zu verweisen, 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 eine aktive Entität bezeichnet. Es verschwindet, wenn das Gerät neu gestartet wird.
  • Mehrere Prozesse können mit demselben Programm verknüpft sein.
  • Auf einem Multiprozessorsystem können mehrere Prozesse parallel ausgeführt werden.
  • Auf einem Ein-Prozessor-System wird zwar ein echter Parallelismus nicht erreicht, jedoch wird ein Prozess-Ablaufplanungsalgorithmus angewendet, und der Prozessor plant, jeden Prozess einzeln auszuführen, was eine Illusion der Parallelität ergibt.
  • Beispiel: Ausführen mehrerer Instanzen des Programms 'Calculator' Jede der Instanzen wird als ein Prozess bezeichnet.

Faden:

  • Ein Thread ist eine Teilmenge des Prozesses.
  • Es wird als ein "leichter Prozess" bezeichnet, da es einem realen Prozess ähnlich ist, aber im Kontext eines Prozesses ausgeführt wird und dieselben Ressourcen teilt, die dem Prozess vom Kernel zugewiesen werden.
  • Normalerweise hat ein Prozess nur einen Steuerungsstrang - einen Satz von Maschinenbefehlen, die gleichzeitig ausgeführt werden.
  • Ein Prozess kann auch aus mehreren Ausführungsthreads bestehen, die Anweisungen gleichzeitig ausführen.
  • Mehrere Threads der Steuerung können die echte Parallelität ausnutzen, die auf Multiprozessorsystemen möglich ist.
  • Auf einem Ein-Prozessor-System wird ein Thread-Scheduling-Algorithmus angewendet, und der Prozessor plant, jeden Thread einzeln auszuführen.
  • Alle Threads, die innerhalb eines Prozesses ausgeführt werden, teilen sich den gleichen Adressraum, Dateideskriptoren, Stapel und andere prozessbezogene Attribute.
  • Da die Threads eines Prozesses denselben Speicher teilen, gewinnt die Synchronisierung des Zugriffs auf die gemeinsam genutzten Daten innerhalb des Prozesses eine beispiellose Bedeutung.

Ich habe die obigen Informationen von der Wissensquest! Blog.


218
2018-03-19 14:17



Betrachten wir zuerst den theoretischen Aspekt. Sie müssen verstehen, was ein Prozess ist, um den Unterschied zwischen einem Prozess und einem Thread und dem, was zwischen ihnen geteilt wird, zu verstehen.

Wir haben folgendes aus dem Abschnitt 2.2.2 Das klassische Thread-Modell im Moderne Betriebssysteme 3e von Tanenbaum:

Das Prozessmodell basiert auf zwei unabhängigen Konzepten: Ressource   Gruppierung und Ausführung. Manchmal ist es nützlich, sie zu trennen.   Hier kommen Fäden rein ....

Er fährt fort:

Eine Möglichkeit, einen Prozess zu betrachten, ist, dass es ein Weg ist   gruppenbezogene Ressourcen zusammen gruppieren. Ein Prozess hat einen Adressraum   enthält Programmtext und Daten sowie andere Ressourcen. Diese   Ressource kann offene Dateien, untergeordnete Prozesse, ausstehende Alarme,   Signalhandler, Buchhaltungsinformationen und mehr. Indem Sie sie setzen   Zusammen in Form eines Prozesses können sie einfacher verwaltet werden.   Das andere Konzept, das ein Prozess hat, ist normalerweise ein Thread der Ausführung   verkürzt auf nur Thread. Der Thread hat einen Programmzähler, der hält   verfolgen, welche Anweisung als nächstes auszuführen ist. Es hat Register, die   halte seine aktuellen Arbeitsvariablen. Es hat einen Stapel, der die enthält   Ausführungshistorie, mit einem Rahmen für jede aufgerufene Prozedur, aber nicht   noch zurückgekommen von. Obwohl ein Thread in einem Prozess ausgeführt werden muss, ist der   Thread und sein Prozess sind unterschiedliche Konzepte und können behandelt werden   getrennt. Prozesse werden verwendet, um Ressourcen zusammenzufassen. Fäden   sind die Entitäten, die zur Ausführung auf der CPU geplant sind.

Weiter unten gibt er die folgende Tabelle an:

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        |

Lassen Sie uns mit dem befassen Hardware-Multithreading Problem. Klassischerweise würde eine CPU einen einzelnen Ausführungsprozeß unterstützen, wobei der Zustand des Threads über einen einzelnen Programmzähler und einen Satz von Registern aufrechterhalten wird. Aber was passiert, wenn es einen Cache-Fehler gibt? Es dauert sehr lange, um Daten aus dem Hauptspeicher zu holen, und währenddessen befindet sich die CPU gerade im Leerlauf. Also hatte jemand die Idee, grundsätzlich zwei Sätze von Thread-Status (PC + -Register) zu haben, so dass ein anderer Thread (vielleicht in demselben Prozess, vielleicht in einem anderen Prozess) Arbeit erledigen kann, während der andere Thread auf Hauptspeicher wartet. Es gibt mehrere Namen und Implementierungen dieses Konzepts, z. B. HyperThreading und Simultanes Multithreading (Kurz SMT).

Nun schauen wir uns die Software-Seite an. Es gibt grundsätzlich drei Möglichkeiten, wie Threads softwareseitig implementiert werden können.

  1. Userspace-Threads
  2. Kernel-Threads
  3. Eine Kombination aus beidem

Alles, was Sie zum Implementieren von Threads benötigen, ist die Möglichkeit, den CPU-Status zu speichern und mehrere Stapel zu verwalten, was in vielen Fällen im Benutzerbereich erfolgen kann. Der Vorteil von User-Space-Threads ist die superschnelle Thread-Umschaltung, da Sie sich nicht in den Kernel einklinken müssen und Ihre Threads so planen können, wie Sie möchten. Der größte Nachteil ist die Unfähigkeit blockierende I / O zu machen (was den gesamten Prozess und all seine Benutzer-Threads blockieren würde), was einer der Hauptgründe dafür ist, dass wir Threads überhaupt verwenden. Das Blockieren von E / A unter Verwendung von Threads vereinfacht den Programmentwurf in vielen Fällen erheblich.

Kernel-Threads haben den Vorteil, blockierende E / A zu verwenden und alle Planungsprobleme dem Betriebssystem zu überlassen. Aber jeder Thread-Switch erfordert Trapping in den Kernel, der möglicherweise relativ langsam ist. Wenn Sie jedoch Threads wegen blockierter E / A wechseln, ist das kein wirkliches Problem, da die E / A-Operation Sie wahrscheinlich ohnehin schon im Kernel gefangen hat.

Ein anderer Ansatz besteht darin, die beiden zu kombinieren, wobei mehrere Kernel-Threads jeweils mehrere Benutzer-Threads aufweisen.

Wenn Sie also auf Ihre Terminologiefrage zurückkommen, können Sie sehen, dass ein Prozess und ein Ausführungsstrang zwei verschiedene Konzepte sind und Ihre Wahl des zu verwendenden Begriffs davon abhängt, wovon Sie sprechen. Was den Begriff "Lightweight Process" angeht, sehe ich den Punkt darin nicht persönlich, da er nicht wirklich vermittelt, was hier vor sich geht, und auch nicht den Begriff "Thread of Execution".


90
2017-10-22 12:42



Um mehr in Bezug auf gleichzeitige Programmierung zu erklären

  1. Ein Prozess hat eine eigenständige Ausführungsumgebung. Ein Prozess verfügt im Allgemeinen über einen vollständigen, privaten Satz grundlegender Laufzeitressourcen. insbesondere hat jeder Prozess seinen eigenen Speicherplatz.

  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 ermöglicht eine effiziente, aber möglicherweise problematische Kommunikation.

Durchschnittliche Person im Kopf behalten,

Öffnen Sie auf Ihrem Computer Microsoft Word und den Webbrowser. Wir nennen diese zwei Prozesse.

In Microsoft Word geben Sie etwas ein und es wird automatisch gespeichert. Jetzt hätten Sie beobachtet, dass das Bearbeiten und Speichern parallel erfolgt - Bearbeiten eines Threads und Speichern des anderen Threads.


57
2017-12-24 07:04



Eine Anwendung besteht aus einem oder mehreren Prozessen. Ein Prozess ist im einfachsten Sinne ein ausführendes Programm. Ein oder mehrere Threads werden im Kontext des Prozesses ausgeführt. Ein Thread ist die Grundeinheit, der das Betriebssystem Prozessorzeit zuweist. Ein Thread kann jeden Teil des Prozesscodes ausführen, einschließlich Teilen, die gerade von einem anderen Thread ausgeführt werden. Eine Glasfaser ist eine Ausführungseinheit, die von der Anwendung manuell geplant werden muss. Fasern werden im Kontext der Threads ausgeführt, die sie planen.

Gestohlen von Hier.


40
2017-10-14 09:16



Ein Prozess ist eine Sammlung von Code, Speicher, Daten und anderen Ressourcen. Ein Thread ist eine Code-Sequenz, die im Rahmen des Prozesses ausgeführt wird. Sie können (normalerweise) mehrere Threads gleichzeitig innerhalb desselben Prozesses ausführen.


22
2017-10-14 09:30



  • Jeder Prozess ist ein Thread (primärer Thread).
  • Aber jeder Thread ist kein Prozess. Es ist ein Teil (Entität) eines Prozesses.

21
2017-08-09 20:28