Ein Prozess muss mindestens einen Thread haben, kann aber mehrere Threads haben. Ein Thread kann nur innerhalb des Adressraums eines Prozesses ausgeführt werden. 2. Ressourcen werden Prozessen zugewiesen, und alle Threads desselben Prozesses teilen sich alle Ressourcen des Prozesses. 3. Die CPU wird Threads zugewiesen, dh die Threads werden tatsächlich auf dem Prozessor ausgeführt. Um eine Synchronisierung zu erreichen, müssen die ausführenden Threads miteinander zusammenarbeiten, und prozessübergreifende Threads sollten die Nachrichtenkommunikation nutzen.
Prozess ist die Grundeinheit der Ressourcenzuweisung, Thread ist die Grundeinheit der CPU-Planung und -Verteilung
Thread ist Teil des Prozesses, ein Thread kann nur zu einem Prozess gehören, ein Prozess kann mehrere Threads haben, aber es gibt einen Mindestens ein Thread
Jeder Prozess verfügt über einen unabhängigen Code- und Datenraum (Programmkontext). Threads können als leichtgewichtige Prozesse desselben Typs betrachtet werden Durch den laufenden Stapel- und Programmzähler (PC) ist der Umschaltaufwand zwischen Threads gering
Im Betriebssystem können mehrere Prozesse (Programme) gleichzeitig ausgeführt werden, und mehrere Threads werden gleichzeitig im selben Prozess (Programm) ausgeführt. (durch CPU-Planung wird in jeder Zeitscheibe nur ein Thread ausgeführt)
Das System weist jedem Prozess bei der Ausführung unterschiedlichen Speicherplatz zu. Mit Ausnahme der CPU weist das System dem Thread (den von ihm verwendeten Ressourcen) keinen Speicher zu Threads stammen von dem Prozess, zu dem sie gehören) Ressourcen), Thread-Gruppen können nur Ressourcen gemeinsam nutzen
Kein vorhandener Prozess kann als Single-Threaded betrachtet werden mehrere Zeilen (Threads) Zusammen abgeschlossen
Threads sind Teil des Prozesses, daher werden Threads als leichte Prozesse/leichtgewichtige Prozesse bezeichnet
Die Beziehung zwischen Prozessen und Threads
1 Ein Prozess kann mehrere Threads haben, aber da ist mindestens ein Thread; Ein Thread kann nur im Adressraum eines Prozesses aktiv sein.
2. Ressourcen werden Prozessen zugewiesen und alle Threads desselben Prozesses teilen sich alle Ressourcen des Prozesses.
3. Die CPU ist Threads zugeordnet, das heißt, die Threads laufen tatsächlich auf dem Prozessor.
4. Threads müssen während der Ausführung zusammenarbeiten und synchronisieren. Threads in verschiedenen Prozessen müssen Nachrichtenkommunikation verwenden, um eine Synchronisierung zu erreichen.
Was kann zwischen Prozessen gemeinsam genutzt werden?
Die von Threads gemeinsam genutzte Umgebung umfasst: Prozesscodesegmente, öffentliche Daten des Prozesses (mithilfe dieser gemeinsam genutzten Daten können Threads problemlos miteinander kommunizieren), vom Prozess geöffnete Dateideskriptoren, Signalhandler, Prozess Das aktuelle Verzeichnis und der aktuelle Prozess Benutzer-ID und Prozessgruppen-ID.
Während Prozesse viele Gemeinsamkeiten aufweisen, haben sie auch ihre eigene Persönlichkeit. Mit diesen Persönlichkeiten können Threads Parallelität erreichen. Zu diesen Persönlichkeiten gehören:
1. Thread-ID
Jeder Thread hat seine eigene Thread-ID, die in diesem Prozess eindeutig ist. Prozesse nutzen dies, um Threads zu identifizieren.
2. Registersatzwert
Da Threads gleichzeitig ausgeführt werden, hat jeder Thread seine eigenen unterschiedlichen Laufhinweise. Beim Wechsel von einem Thread zum anderen muss der Registersatz des ursprünglichen Threads gespeichert werden Es kann wiederhergestellt werden, wenn der Thread in Zukunft wieder darauf umgeschaltet wird.
3. Thread-Stack
Der Stack ist notwendig, um sicherzustellen, dass Threads unabhängig laufen.
Thread-Funktionen können Funktionen aufrufen, und die aufgerufenen Funktionen können Schicht für Schicht verschachtelt werden. Daher muss der Thread über einen eigenen Funktionsstapel verfügen, damit der Funktionsaufruf normal ausgeführt werden kann, ohne von anderen Threads beeinflusst zu werden.
4. Fehlerrückgabecode
Da viele Threads gleichzeitig im selben Prozess ausgeführt werden, ist es möglich, dass ein Thread den errno-Wert nach einem Systemaufruf und bevor der Thread den Fehler verarbeitet hat, festlegt. Ein anderer Thread wird zu diesem Zeitpunkt vom Scheduler in Betrieb genommen, sodass der Fehlerwert möglicherweise geändert wird.
Also sollten verschiedene Threads ihre eigenen Fehlerrückgabecodevariablen haben.
5. Signalmaskierungscode des Threads
Da jeder Thread an unterschiedlichen Signalen interessiert ist, sollte der Signalmaskierungscode des Threads vom Thread selbst verwaltet werden. Aber alle Threads nutzen denselben Signalhandler.
6. Thread-Priorität
Da ein Thread wie ein Prozess geplant werden muss, müssen Parameter für die Planung verfügbar sein. Dieser Parameter ist die Priorität des Threads.
Fünf Möglichkeiten der prozessübergreifenden Kommunikation
1. (Unbenannte) Pipe
Halbduplex, das heißt, Daten können nicht gleichzeitig in beide Richtungen übertragen werden. Einige Systeme unterstützen möglicherweise Vollduplex.
Nur zwischen übergeordneten und untergeordneten Prozessen. In seiner klassischen Form erstellt der übergeordnete Prozess eine Pipe und verzweigt dann den untergeordneten Prozess, wodurch die Verwendung zwischen dem übergeordneten und dem untergeordneten Prozess ermöglicht wird.
2. Named Pipe (FIFO)
Auch irrelevante Prozesse können Daten austauschen.
3. Nachrichtenwarteschlange
Eine Nachrichtenwarteschlange ist eine Liste von im Kernel gespeicherten Nachrichten, ähnlich einer verknüpften Liste von Nachrichten. Benutzerprozesse können Nachrichten zur Nachrichtenwarteschlange hinzufügen und Nachrichten aus der Nachrichtenwarteschlange lesen.
Im Vergleich zur Pipeline-Kommunikation besteht der Vorteil der Nachrichtenwarteschlange darin, dass für jede Nachricht ein bestimmter Nachrichtentyp angegeben werden kann. Beim Empfang müssen Sie sich nicht an die Warteschlangenreihenfolge halten, sondern können bestimmte Nachrichtentypen basierend auf benutzerdefinierten Bedingungen empfangen.
Sie können sich eine Nachricht als einen Datensatz mit einem bestimmten Format und einer bestimmten Priorität vorstellen. Ein Prozess mit Schreibberechtigungen für die Nachrichtenwarteschlange kann nach bestimmten Regeln neue Nachrichten zur Nachrichtenwarteschlange hinzufügen, und ein Prozess mit Leseberechtigungen für die Nachrichtenwarteschlange kann Nachrichten aus der Nachrichtenwarteschlange lesen.
4. Semaphore
Wenn mehrere Prozesse auf gemeinsame Daten zugreifen müssen, ist das Semaphor ein Zähler, der hauptsächlich für diesen Zweck verwendet wird. Wenn Sie sicherstellen müssen, dass nicht zwei Prozesse gleichzeitig auf dieselben Daten zugreifen, können Sie eine Semaphore verwenden.
Sein Hauptprozess ist wie folgt:
Überprüfen Sie das Semaphor, das die Ressource steuert.
Wenn der Semaphorwert größer als 0 ist, ist die Ressource verfügbar, und dekrementieren Sie ihn um 1, was anzeigt, dass sie derzeit verwendet wird.
Wenn die Der Semaphorwert ist 0. Der Prozess schläft, bis der Semaphorwert größer als 0 ist. Mit anderen Worten, er stellt tatsächlich ein Mittel zur Zugriffssynchronisierung zwischen verschiedenen Prozessen oder verschiedenen Threads eines Prozesses bereit.
5. Gemeinsamer SpeicherMit dem gemeinsamen Speicher können zwei oder mehr Prozesse einen eigenen Adressraum abbilden. Die Informationen werden von einem Prozess gemeinsam genutzt Der Speicher kann von anderen Prozessen, die diesen gemeinsam genutzten Speicher verwenden, durch einfaches Lesen des Speichers ausgelesen werden, wodurch eine Kommunikation zwischen Prozessen realisiert wird.
Einer der Hauptvorteile der Verwendung von Shared Memory für die Kommunikation ist die hohe Effizienz, da der Prozess den Speicher direkt lesen und schreiben kann, ohne dass Daten kopiert werden müssen. Kommunikationsmethoden wie Pipes und Nachrichtenwarteschlangen müssen im ausgeführt werden Kernel- und Benutzerbereich werden viermal kopiert, während der gemeinsame Speicher nur zweimal kopiert wird: einmal von der Eingabedatei in den gemeinsam genutzten Speicherbereich und das andere Mal vom gemeinsam genutzten Speicher in die Ausgabedatei.
Wenn Prozesse den Speicher gemeinsam nutzen, wird die Zuordnung nach dem Lesen und Schreiben einer kleinen Datenmenge im Allgemeinen nicht aufgehoben und der gemeinsam genutzte Speicherbereich bei einer neuen Kommunikation wiederhergestellt. Stattdessen bleibt der gemeinsam genutzte Bereich erhalten, bis die Kommunikation erfolgt Auf diese Weise wird der Dateninhalt immer im gemeinsamen Speicher gespeichert und nicht in die Datei zurückgeschrieben. Da der Inhalt des gemeinsam genutzten Speichers normalerweise in die Datei zurückgeschrieben wird, wenn die Zuordnung aufgehoben wird, ist die Methode zur Verwendung des gemeinsam genutzten Speichers für die Kommunikation äußerst effizient.
6. Socket:Socket ist im Gegensatz zu anderen Kommunikationsmechanismen auch für die Prozesskommunikation zwischen verschiedenen Computern geeignet.
7. Signal (sinal)Signal ist eine relativ komplexe Kommunikationsmethode, mit der der Empfangsprozess darüber informiert wird, dass ein Ereignis aufgetreten ist
Das obige ist der detaillierte Inhalt vonWelche Beziehung besteht zwischen Threads und Prozessen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!