web-dev-qa-db-ger.com

Was ist Prozess und Thread?

Ja, ich habe viele Materialien zum Betriebssystem gelesen. Und ich lese immer noch. Aber anscheinend beschreiben sie alle den Prozess und den Faden auf "abstrakte" Art und Weise, was viel Aufschluss über ihr Verhalten und ihre logische Organisation gibt. Ich frage mich, was sind sie physisch ? Meiner Meinung nach handelt es sich nur um einige "Datenstrukturen" im Speicher, die von den Kernel-Codes verwaltet und verwendet werden, um die Ausführung des Programms zu erleichtern. Zum Beispiel verwendet das Betriebssystem irgendeine Prozessdatenstruktur (PCB) , um die für ein bestimmtes Programm zugewiesenen Aspekte des Prozesses zu beschreiben, wie z. B. seine Priorität, seinen Adressraum und so weiter. Ist das in Ordnung?

49
smwikipedia

Wenn Sie eine ausführbare Datei wie notepad.exe ausführen, wird normalerweise ein einzelner Prozess erstellt. Diese Prozesse können andere Prozesse hervorbringen, aber in den meisten Fällen gibt es einen einzigen Prozess für jede ausführbare Datei, die Sie ausführen. Innerhalb des Prozesses können viele Threads vorhanden sein. Normalerweise gibt es zuerst einen Thread, der normalerweise am Programmeinstiegspunkt beginnt, was normalerweise die main-Funktion ist. Anweisungen werden nacheinander in einer Reihenfolge ausgeführt. Wie eine Person, die nur eine Hand hat, kann ein Thread immer nur eine Sache ausführen, bevor er zur nächsten übergeht.

Dieser erste Thread kann zusätzliche Threads erstellen. Jeder weitere Thread hat einen eigenen Einstiegspunkt, der normalerweise mit einer Funktion definiert wird. Der Prozess ist wie ein Container für alle Threads, die in ihm erzeugt wurden.

Das ist eine ziemlich vereinfachende Erklärung. Ich könnte auf Details eingehen, würde sich aber wahrscheinlich mit dem überschneiden, was Sie in Ihren Lehrbüchern finden.

BEARBEITEN: Sie werden feststellen, dass es viele "normalerweise" in meiner Erklärung gibt, da es gelegentlich seltene Programme gibt, die Dinge drastisch anders machen.

28
AaronLS

Das erste, was Sie wissen müssen, um den Unterschied zwischen einem Prozess und einem Thread zu verstehen, ist die Tatsache, dass Prozesse nicht ausgeführt werden, Threads .

Was ist also ein Thread? Am nächsten kann ich erklären, dass es sich um einen Ausführungsstatus handelt, wie in: eine Kombination von CPU-Registern, Stack, das Los. Sie können einen Beweis dafür sehen, indem Sie einen Debugger in any gegebenen Moment einschalten. Was siehst du? Ein Aufrufstack, eine Reihe von Registern. Das wars so ziemlich. Das ist der Faden.

Was ist nun ein Prozess? Nun, es ist wie eine abstrakte "Container" -Entität zum Ausführen von Threads. Was das Betriebssystem in erster Näherung anbelangt, so handelt es sich dabei um eine Entität, die das Betriebssystem VM zugewiesen hat, einige Systemressourcen (wie Dateihandles, Netzwerk-Sockets) usw. zuweisen.

Wie arbeiten sie zusammen? Das Betriebssystem erstellt einen "Prozess", indem es einige Ressourcen für es reserviert und einen "Haupt" -Thread startet. Dieser Thread kann dann weitere Threads erzeugen. Das sind die Threads in einem Prozess. Sie können diese Ressourcen mehr oder weniger auf die eine oder andere Weise gemeinsam nutzen (beispielsweise kann das Sperren erforderlich sein, damit sie den Spaß für andere nicht stören können & c). Von da an ist das Betriebssystem normalerweise dafür verantwortlich, diese Threads "innerhalb" von VM zu halten (Versuche, auf Speicher zuzugreifen, der zu diesem Prozess nicht "gehört"), zu erkennen und zu verhindern , damit sie "ein-nach-einem-und-nicht-nur-eins-alle-mal" laufen können.

29
Dmitry

Einer der Gründe, warum es so gut wie unmöglich ist, Threads und Prozesse nicht abstrakt zu beschreiben, ist, dass es sich bei ihnen um Abstraktionen handelt.

Ihre konkreten Umsetzungen unterscheiden sich enorm .

Vergleichen Sie zum Beispiel einen Erlang-Prozess und einen Windows-Prozess: Ein Erlang-Prozess ist sehr leicht, häufig weniger als 400 Bytes. Sie können problemlos 10 Millionen Prozesse auf einem nicht sehr aktuellen Laptop starten. Sie starten sehr schnell, sie sterben sehr schnell und Sie werden erwartet um sie für sehr kurze aufgaben einsetzen zu können. Jedem Erlang-Prozess ist ein eigener Garbage Collector zugeordnet. Erlang-Prozesse können niemals Speicher gemeinsam nutzen.

Windows-Prozesse sind sehr schwer, manchmal Hunderte von MiByte. Sie können vielleicht ein paar Tausend davon auf einem kräftigen Server starten, wenn Sie Glück haben. Sie fangen an und sterben ziemlich langsam. Windows-Prozesse sind die Einheiten von Anwendungen wie IDEs oder Texteditoren oder Textverarbeitungsprogrammen. Daher wird normalerweise eine recht lange Lebensdauer (mindestens einige Minuten) erwartet. Sie haben einen eigenen Adressraum, aber keinen Garbage Collector. Windows-Prozesse können Speicher freigeben, dies ist jedoch standardmäßig nicht der Fall.

Ähnliches gilt für Threads: Ein NPTL-Linux-Thread auf x86 kann bis zu 4 KB groß sein, und mit einigen Tricks können Sie 800000+ auf einem 32-Bit-x86-Computer starten. Die Maschine wird sicherlich mit Tausenden, vielleicht Zehntausenden von Fäden verwendbar sein. Ein .NET CLR-Thread hat eine Mindestgröße von etwa 1 MB, was bedeutet, dass nur 4000 davon Ihren gesamten Adressraum auf einem 32-Bit-Computer beanspruchen. Obwohl 4000 NPTL Linux-Threads im Allgemeinen kein Problem darstellen, können Sie nicht einmal 4000 .NET CLR-Threads starten , da Ihnen vorher der Speicher ausgeht Das.

OS-Prozesse und OS-Threads werden auch zwischen verschiedenen Betriebssystemen sehr unterschiedlich implementiert. Die beiden wichtigsten Ansätze sind: Der Kernel kennt sich nur mit Prozessen aus. Threads werden von einer Userspace-Bibliothek implementiert, ohne den Kernel zu kennen. In diesem Fall gibt es wieder zwei Ansätze: 1: 1 (jeder Thread wird einem Kernel-Prozess zugeordnet) oder m: n (m Threads werden n Prozessen zugeordnet, wobei normalerweise m> n und häufig n == #CPUs). Dies war der frühe Ansatz vieler Betriebssysteme, nachdem Threads erfunden wurden. Es wird jedoch normalerweise als ineffizient angesehen und wurde auf fast allen Systemen durch den zweiten Ansatz ersetzt: Threads werden (zumindest teilweise) im Kernel implementiert, sodass der Kernel nun zwei unterschiedliche Entitäten kennt, Threads und Prozesse.

Ein Betriebssystem, das einen dritten Weg geht, ist Linux. Unter Linux sind Threads weder im Userspace noch im Kernel implementiert. Stattdessen bietet der Kernel eine Abstraktion von sowohl einem Thread als auch einem Prozess (und in der Tat ein paar weiteren Dingen), die als Task bezeichnet werden. Eine Aufgabe ist eine vom Kernel geplante Entität, die eine Reihe von Flags enthält, die bestimmen, welche Ressourcen sie mit ihren Geschwistern teilt und welche privat sind.

Abhängig davon, wie Sie diese Flags setzen, erhalten Sie entweder einen Thread (so ziemlich alles gemeinsam nutzen) oder einen Prozess (alle Systemressourcen wie die Systemuhr, den Dateisystem-Namespace, den Netzwerk-Namespace, den Benutzer-ID-Namespace, den Prozess-ID-Namespace usw.). aber nicht teilen den Adressraum). Aber Sie können auch einige andere interessante Dinge bekommen. Sie können trivialerweise Jails im BSD-Stil erhalten (im Grunde die gleichen Flags wie bei einem Prozess, aber das Dateisystem oder den Netzwerk-Namespace nicht gemeinsam nutzen). Oder Sie erhalten, was andere Betriebssysteme als Virtualisierungscontainer oder -zone bezeichnen (wie ein Gefängnis, teilen jedoch nicht die UID- und PID-Namespaces und die Systemuhr). Seit ein paar Jahren können Sie über eine Technologie namens KVM (Kernel Virtual Machine) sogar eine vollwertige virtuelle Maschine erhalten (teilen Sie nichts, nicht einmal die Seitentabellen des Prozessors). [Das Coole daran ist, dass Sie den ausgereiften Task Scheduler im Kernel für all diese Dinge wiederverwenden können. Eines der Dinge, für die die Xen Virtual Machine oft kritisiert hat, war die schlechte Leistung ihres Schedulers. Die KVM Entwickler haben einen viel besseren Scheduler als Xen, und das Beste ist, sie mussten nicht einmal eine einzige Codezeile dafür schreiben!]

Daher ist die Leistung von Threads und Prozessen unter Linux viel besser als unter Windows und vielen anderen Systemen, da sie unter Linux tatsächlich identisch sind. Das bedeutet, dass die Verwendungsmuster sehr unterschiedlich sind: Unter Windows entscheiden Sie sich in der Regel basierend auf ihrer Gewichtung zwischen der Verwendung eines Threads und eines Prozesses: Kann ich mir einen Prozess leisten oder sollte ich einen Thread verwenden, obwohl ich ihn eigentlich nicht freigeben möchte? Zustand? Unter Linux (und normalerweise unter Unix im Allgemeinen) entscheiden Sie anhand ihrer Semantik, ob ich den Status tatsächlich freigeben möchte oder nicht.

Ein Grund , warum Prozesse unter Unix leichter sind als unter Windows, liegt in der unterschiedlichen Verwendung: Unter Unix sind Prozesse die Grundeinheit für Parallelität und Funktionalität. Wenn Sie Parallelität verwenden möchten, verwenden Sie mehrere Prozesse. Wenn Ihre Anwendung in mehrere unabhängige Teile unterteilt werden kann, verwenden Sie mehrere Prozesse. Jeder Prozess macht genau eine Sache und nur diese eine Sache. Selbst ein einfaches einzeiliges Shell-Skript umfasst oft Dutzende oder Hunderte von Prozessen. Anwendungen bestehen in der Regel aus vielen, oft kurzlebigen Prozessen.

Unter Windows sind Threads die Grundeinheiten für die Parallelität und COM-Komponenten oder .NET-Objekte die Grundeinheiten für die Funktionalität. Anwendungen bestehen normalerweise aus einem einzigen Prozess mit langer Laufzeit.

Auch hier werden sie für sehr unterschiedliche Zwecke verwendet und haben sehr unterschiedliche Designziele. Es ist nicht so, dass das eine oder das andere besser oder schlechter ist, es ist nur so, dass sie so unterschiedlich sind, dass die gemeinsamen Eigenschaften nur sehr abstrakt beschrieben werden können.

Die wenigen Dinge, die Sie über Threads und Prozesse sagen können, sind:

  • Themen gehören zu Prozessen
  • Themen sind leichter als Prozesse
  • Threads teilen den meisten Status miteinander
  • Prozesse haben einen wesentlich geringeren Status als Threads (insbesondere teilen sie sich im Allgemeinen keinen Speicher, sofern dies nicht ausdrücklich angefordert wird).
10
Jörg W Mittag

Ich würde sagen, dass :

Ein Prozess verfügt über einen Speicherplatz, geöffnete Dateien, ... und einen oder mehrere Threads. 

Ein Thread ist ein Befehlsstrom, der vom System auf einem Prozessor geplant werden kann. 

7
Ben

Schauen Sie sich die ausführliche Antwort an, die ich zuvor auf SO gegeben habe. Es gibt einen Einblick in eine Spielzeugkernstruktur, die für die Aufrechterhaltung der Prozesse und der Threads verantwortlich ist.

Ich hoffe, das hilft. Mit freundlichen Grüßen Tom.

7
t0mm13b

Wir haben dieses Thema hier mehrmals diskutiert. Vielleicht finden Sie hier hilfreiche Informationen:

Was ist der Unterschied zwischen einem Prozess und einem Thread

Prozess gegen Thread

Thread und Prozess

5
DOK

Ein Prozess ist ein Container für eine Gruppe von Ressourcen, die beim Ausführen eines Programms verwendet werden. 

Ein Prozess umfasst Folgendes:

  • Privater virtueller Adressraum 
  • Ein Programm. 
  • Eine Liste von Ziehpunkten. 
  • Ein Zugriffstoken. 
  • Eine eindeutige Prozess-ID.
  • Mindestens ein Thread.  
  • Ein Zeiger auf den übergeordneten Prozess, unabhängig davon, ob der Prozess noch vorhanden ist oder nicht.

Ein Prozess kann jedoch mehrere Threads enthalten. 

Prozesse selbst können in Jobs gruppiert werden, die Container für Prozesse sind und als einzelne Einheiten ausgeführt werden. 

A thread verwendet Windows, um die Ausführung von Anweisungen auf der CPU zu planen. Jeder Prozess hat mindestens einen. 

Ich habe ein paar Seiten in meinem Wiki, die Sie sich ansehen könnten:

Prozess

Faden

4
David Morton

Physikalisch:

  • Prozess ist eine Struktur, die die Berechtigungsnachweise, die Thread-Liste und eine offene Handle-Liste verwaltet

  • Ein Thread ist eine Struktur, die einen Kontext enthält (d. H. Einen gespeicherten Registersatz + einen auszuführenden Ort), einen Satz von PTEs, die beschreiben, welche Seiten in den virtuellen Adressraum des Prozesses abgebildet werden, und einen Eigentümer. 

Dies ist natürlich eine extrem vereinfachte Erklärung, aber sie liefert die wichtigen Bits. Die grundlegende Einheit der Ausführung unter Linux und Windows ist der Thread - der Kernel-Scheduler interessiert sich nicht für Prozesse (viel). Aus diesem Grund ist ein Thread unter Linux nur ein Prozess, der PTEs mit einem anderen Prozess gemeinsam nutzt. 

3
Paul Betts

Threads sind Speicherstrukturen im Scheduler des Betriebssystems, wie Sie sagen. Threads zeigen auf den Beginn einiger Anweisungen im Speicher und verarbeiten diese, wenn der Scheduler entscheidet, dass sie es sein sollten. Während der Thread ausgeführt wird, wird der Hardware-Timer ausgeführt. Sobald die gewünschte Zeit erreicht ist, wird ein Interrupt aufgerufen. Danach stoppt die Hardware die Ausführung des aktuellen Programms und ruft die registrierte Interrupt-Handler-Funktion auf, die Teil des Schedulers ist, um zu informieren, dass der aktuelle Thread die Ausführung beendet hat.

3
Chris Dennett

Ein Prozess ist ein Bereich im Arbeitsspeicher, der vom Betriebssystem zum Ausführen einer Anwendung verwaltet wird. Thread ist ein kleiner Speicherbereich innerhalb eines Prozesses, um eine dedizierte Aufgabe auszuführen.

2
Kangkan

Es ist schwer, eine kurze Antwort zu geben, die dieser Frage gerecht wird.

Und bei der Gefahr, dass dies furchtbar falsch läuft und die Dinge vereinfacht werden, kann man sagen, dass Threads und Prozesse ein Betriebssystem/Plattform-Konzept sind. und unter der Haube können Sie einen Single-Threaded-Prozess definieren, indem Sie

  • Low-Level-CPU-Anweisungen (auch bekannt als das Programm).
  • Ausführungsstatus - bedeutet Befehlszeiger (eigentlich ein spezielles Register), Registerwerte und Stack
  • Der Heap (alias Allzweckspeicher).

In modernen Betriebssystemen hat jeder Prozess einen eigenen Speicherplatz. Abgesehen von Shared Memory (dies wird nur von einigen Betriebssystemen unterstützt) verbietet das Betriebssystem, dass ein Prozess in den Speicher eines anderen schreibt. In Windows wird ein allgemeiner Schutzfehler angezeigt, wenn ein Prozess versucht.

Man kann also sagen, dass ein Multithreading-Prozess das gesamte Paket ist. Und jeder Thread ist im Grunde nichts weiter als ein Ausführungszustand.

Wenn also ein Thread für einen anderen vorbelegt wird (z. B. auf einem Einprozessorsystem), muss das Betriebssystem grundsätzlich nur den Ausführungsstatus des Threads speichern (nicht sicher, ob er etwas Besonderes tun muss) den Stapel) und laden in einem anderen.

Andererseits ist das Vorenthalten eines gesamten Prozesses teurer als Sie sich vorstellen können.

Edit: Die Ideen gelten auch für abstrahierte Plattformen wie Java.

2
hythlodayr

Prozesse und Threads sind Abstraktionen - es gibt nichts Physisches an sich oder irgendeinen anderen Teil eines Betriebssystems. Deshalb nennen wir es Software.

Wenn Sie einen Computer physikalisch betrachten, erhalten Sie ein Durcheinander von Elektronik, die emuliert, was eine Turing Machine macht. Wenn Sie versuchen, irgendetwas Nützliches mit einer rohen Abrichtmaschine zu tun, würde Ihr Gehirn in Fünf Minuten flach zu Jell-O werden. Um Diese unangenehme Erfahrung zu vermeiden, entwickelten die Computerleute eine Reihe von Abstraktionen, um Verschiedene Aspekte der Datenverarbeitung zu unterteilen. Auf diese Weise können Sie sich auf die Abstraktionsebene konzentrieren, die Sie Interessiert, ohne sich um all die anderen Dinge kümmern zu müssen, die sie unterstützen. Einige Dinge wurden in Schaltkreise gegossen (z. B. Addierer und Ähnliches), was sie physisch macht, aber die Große Mehrheit unserer Arbeiten basiert auf einer Menge Abstraktionen. In der Regel haben die Abstraktionen , Die wir verwenden, eine Form mathematischer Grundlage. Aus diesem Grund spielen Stapel, Warteschlangen und "Staat" eine so wichtige Rolle in der Datenverarbeitung. Es gibt eine fundierte Menge an Mathematik um diese Abstraktionen, mit deren Hilfe wir auf bauen können. .] ihre Manipulation.

Der Schlüssel ist zu erkennen, dass Software immer auf einem - Verbund abstrakter Modelle von "Dingen" basiert. Diese "Dinge" beziehen sich nicht immer auf Etwas Physisches, eher auf eine andere Abstraktion. Aus diesem Grund können Sie mit Nirgendwo in Ihren Lehrbüchern eine befriedigende "physische" Grundlage für Prozesse und Threads Finden.

Einige andere Leute haben Links und Erklärungen zu den Threads und Prozessen veröffentlicht, aber keiner von ihnen weist auf etwas "physisches" hin. Wie Sie sich schon gedacht haben, handelt es sich bei den Eigentlich nur um eine Reihe von Datenstrukturen und Regeln, die im größeren Kontext eines Betriebssystems leben (was wiederum nur mehr Datenstrukturen und Regeln ist ...)

Software ist wie eine Zwiebel, Schicht für Schicht für Schicht. Wenn Sie alle Schichten (Abstraktionen) entfernt haben, bleibt nicht mehr viel übrig! Aber die Zwiebel ist immer noch sehr real.

1
NealB

Ich hatte viele der Antworten gesehen, aber die meisten sind für einen OS-Anfänger nicht klar genug.

In einem modernen Betriebssystem verfügt ein Prozess über eine virtuelle CPU, virtuellen Speicher und virtuelle E/A.

Virtuelle CPU: Wenn Sie über mehrere Kerne verfügen, wird dem Prozess möglicherweise ein oder mehrere Kerne zur Verarbeitung durch den Scheduler zugewiesen.

Virtuelle E/A: E/A kann von verschiedenen Prozessen gemeinsam genutzt werden. Wie bei einer Beispieltastatur, die von mehreren Prozessen gemeinsam genutzt werden kann. Wenn Sie also einen Notizblock eingeben, wird der Text geändert, während ein Key Logger als Daemon ausgeführt wird, der alle Tastenanschläge speichert. Der Prozess teilt also eine E/A-Ressource.

Virtueller Speicher: http://en.wikipedia.org/wiki/Virtual_memory Sie können den Link durchgehen.

Wenn also ein Prozess vom Scheduler aus dem Ausführungszustand genommen wird, enthält er den Status, der die in den Registern gespeicherten Werte enthält, dessen Stack und Heap und vieles mehr werden in einer Datenstruktur gespeichert.

Wenn wir also einen Prozess mit einem Thread vergleichen, teilen sich die von einem Prozess gestarteten Threads die virtuelle E/A und den virtuellen Speicher, die dem Prozess zugeordnet sind, der ihn gestartet hat, nicht jedoch die virtuelle CPU. Es kann also mehrere Threads geben Sie werden von einem Prozess gestartet, der denselben virtuellen Speicher und dieselbe virtuelle E/A-Einheit hat, jedoch unterschiedliche virtuelle CPUs aufweist. 

Sie verstehen also die Notwendigkeit, die Ressource eines Prozesses zu sperren, sei es statisch zugewiesen (Stack) oder dynamisch (Heap), da der virtuelle Speicherplatz von Threads eines Prozesses gemeinsam genutzt wird.

Außerdem kann jeder Thread, der über eine eigene virtuelle CPU verfügt, parallel in verschiedenen Kernen ausgeführt werden, wodurch die Fertigstellungszeit eines Prozesses erheblich reduziert wird (eine Verringerung ist nur zu beobachten, wenn Sie den Speicher sinnvoll verwaltet haben und mehrere Kerne vorhanden sind).

1
anupash

Sie sind keine physischen Schnurstücke, wenn Sie das fragen. ;)

Soweit ich es verstehe, sind so ziemlich alles im Betriebssystem nur Daten. Moderne Betriebssysteme hängen von einigen Hardwareanforderungen ab: Konvertierung virtueller Speicheradressen, Interrupts und Speicherschutz (Es gibt viele unscharfe Hardware-/Software-Magie, die beim Booten auftritt, aber ich bin mit diesem Vorgang nicht sehr vertraut). Sobald diese physischen Anforderungen erfüllt sind, bleibt der Betriebssystem-Designer für alles andere verantwortlich. Es sind alles nur Datenblöcke.

1
jdizzle

Der Grund dafür, dass sie nur abstrakt erwähnt werden, besteht darin, dass sie Konzepte sind, während sie als Datenstrukturen implementiert werden. Es gibt keine allgemeine Regel, wie sie implementiert werden müssen.
Dies gilt zumindest für die Threads/Prozesse selbst, sie werden ohne Scheduler und Interrupt-Timer nicht viel ausrichten.
Der Scheduler ist der Algorithmus, mit dem das Betriebssystem den nächsten Thread für eine begrenzte Zeitdauer wählt, und der Interrupt-Timer ist ein Stück Hardware, das die Ausführung des aktuellen Threads und die Steuerung der Hände periodisch unterbricht der Scheduler 

Vergessen Sie etwas: Das obige trifft nicht zu, wenn Sie nur über kooperatives Threading verfügen und kooperative Threads aktiv die Kontrolle an den nächsten Thread abgeben müssen, was bei einem Thread-Abruf nach Ergebnissen eines anderen Threads hässlich werden kann, der darauf wartet, dass der erste Thread nachgibt.
Diese sind noch leichter als andere Threads, da das zugrunde liegende Betriebssystem nicht unterstützt werden muss. 

1
josefx

Versuchen, diese Frage in Bezug auf die Java-Welt zu beantworten.

Ein Prozess ist die Ausführung eines Programms, aber ein Thread ist eine einzelne Ausführungssequenz innerhalb des Prozesses. Ein Prozess kann mehrere Threads enthalten. Ein Thread wird manchmal als leichter Prozess bezeichnet.

Zum Beispiel:

Beispiel 1: Eine JVM wird in einem einzelnen Prozess ausgeführt und Threads in einer JVM teilen sich den Heap, der zu diesem Prozess gehört. Daher können mehrere Threads auf dasselbe Objekt zugreifen. Threads teilen sich den Heap und haben ihren eigenen Stackplatz. Auf diese Weise werden der Aufruf einer Methode durch einen Thread und die lokalen Variablen Thread vor anderen Threads geschützt. Der Heap ist jedoch nicht threadsicher und muss aus Sicherheitsgründen synchronisiert werden.

Beispiel 2: Ein Programm kann möglicherweise nicht durch Lesen von Tastenanschlägen Bilder zeichnen. Das Programm muss sich ganz auf die Tastatureingaben konzentrieren, und die Möglichkeit, mehr als ein Ereignis gleichzeitig zu bearbeiten, führt zu Problemen. Die ideale Lösung für dieses Problem ist die nahtlose Ausführung von zwei oder mehr Programmteilen gleichzeitig. Threads erlaubt uns dies zu tun. Hier ist das Zeichnen von Bildern ein Prozess und das Lesen von Tastenanschlägen ist ein Unterprozess (Thread). 

0
Rupesh

Ein Thread wird durch einen Prozess gesteuert, ein Prozess wird durch das Betriebssystem gesteuert

0
Joel Martinez

Prozess ist ein Container mit Threads. 

0
den bardadym

Prozess teilt Speicher nicht untereinander auf - da es in einem sogenannten "protected flat model" arbeitet, teilen Threads den gleichen Speicher. 

0
Dewfy

Bei Windows enthält das Betriebssystem (Windows) mindestens einmal, wenn Sie Windows 3.1 überschreiten, mehrere Prozesse mit jeweils eigenem Speicherplatz und kann ohne das Betriebssystem nicht mit anderen Prozessen interagieren.

Jeder Prozess verfügt über einen oder mehrere Threads, die sich den gleichen Speicherplatz teilen und nicht das Betriebssystem benötigen, um mit anderen Threads zu interagieren.

0
John Taylor

Nun, ich habe noch keine Antwort auf "Was sind sie physisch" gesehen. Also versuche ich es.

Prozesse und Thread sind nichts Phyicales. Sie sind eine Funktion des Betriebssystems. Üblicherweise wissen physische Komponenten eines Computers nicht über sie Bescheid. Die CPU verarbeitet nur einen sequentiellen Strom von Opcodes. Diese Opcodes können zu einem Thread gehören. Dann verwendet das Betriebssystem Traps und Interrupts, um die Kontrolle wiederzuerlangen, zu entscheiden, welcher Code ausgeführt werden soll, und zu einem anderen Thread zu wechseln.

0
Michael Stoll

Prozess ist eine vollständige Entität, z. und exe datei oder eine jvm. Es kann einen untergeordneten Prozess eines übergeordneten Prozesses geben, bei dem die Exe-Datei erneut in einem separaten Bereich ausgeführt wird. Thread ist ein separater Ausführungspfad in demselben Prozess, in dem der Prozess steuert, welcher Thread ausgeführt werden soll, und so weiter. 

0
fastcodejava