Im folgenden Artikel erfahren Sie, was Threads in Python sind. Erfahren Sie mehr über den Python-Prozess und welche Rolle Multithread-Python bei der Python-Programmierung spielen kann.
Einführung in die Konzepte und Unterschiede zwischen Prozessen und Threads
1. Grundkonzepte von Threads
Konzepte
Thread ist die kleinste Einheit, die Vorgänge im Prozess ausführt. Er ist eine Einheit im Prozess und die Basiseinheit, die vom System unabhängig geplant und verteilt wird. Der Thread selbst besitzt keine Systemressourcen, sondern nur einige Ressourcen Während des Betriebs unerlässlich, aber alle Ressourcen, die dem Prozess gehören, können mit anderen Threads geteilt werden, die zum selben Prozess gehören. Ein Thread kann einen anderen Thread erstellen und zerstören, und mehrere Threads im selben Prozess können gleichzeitig ausgeführt werden.
Vorteile
(1) Einfach zu planen.
(2) Verbessern Sie die Parallelität. Parallelität kann einfach und effizient durch Threads erreicht werden. Ein Prozess kann mehrere Threads erstellen, um verschiedene Teile desselben Programms auszuführen.
(3) Weniger Overhead. Das Erstellen von Threads ist schneller als das Erstellen von Prozessen und erfordert sehr wenig Overhead
2. Der Grundstatus des Prozesses und die Beziehung zwischen den Zuständen
Status: läuft, blockiert, suspendiert, blockiert, bereit, aufgehängt Übergang zwischen Bereit-
-Zuständen:
(1) Der Bereitschaftsprozess soll von der CPU ausgeführt werden und wird in den Ausführungszustand
(2) Läuft Ein Prozess, der stellt eine E/A-Anfrage oder kann die angeforderte Ressource nicht abrufen.
(3) Ein laufender Prozess wird bereit, nachdem die Prozessausführung abgeschlossen ist (oder die Zeitscheibe abgelaufen ist). (4) Unterbrechen Sie den blockierten Prozess in den angehaltenen, blockierten Zustand. Wenn der E/A-Vorgang, der die Blockierung des Prozesses verursacht hat, abgeschlossen ist, bevor der Benutzer den Prozess neu startet (Wake-up genannt), wird der angehaltene, blockierte Zustand in einen angehaltenen Bereitschaftszustand versetzt . Wenn der Benutzer den Prozess neu startet, bevor der E/A-Vorgang endet, wird der angehaltene Blockierungsstatus zu einem Blockierungsstatus Der Prozess wird fortgesetzt, der angehaltene Bereitschaftszustand wird bereit
3. Die Beziehung und der Unterschied zwischen Threads und Prozessen?
Die Beziehung zwischen Prozessen und Threads:
(1) Ein Thread kann nur zu einem Prozess gehören, und ein Prozess kann mehrere Threads haben, aber es gibt mindestens einen Thread.
(2) Ressourcen werden Prozessen zugewiesen und alle Threads desselben Prozesses teilen sich alle Ressourcen des Prozesses.
(3) Der Prozessor ist dem Thread zugewiesen, das heißt, der Thread wird tatsächlich auf dem Prozessor ausgeführt
(4) Der Thread muss während der Ausführung zusammenarbeiten und synchronisieren. Die Threads verschiedener Prozesse müssen die Nachrichtenkommunikation verwenden, um eine Synchronisierung zu erreichen. Ein Thread bezieht sich auf eine Ausführungseinheit innerhalb eines Prozesses und ist auch eine planbare Einheit innerhalb des Prozesses
Der Unterschied zwischen einem Prozess und einem Thread:
(1) Planung: Thread ist die Grundlage Planungs- und Zuteilungseinheit. Prozess ist die Grundeinheit des Ressourceneigentums
(2) Parallelität: Nicht nur Prozesse können gleichzeitig ausgeführt werden, sondern auch mehrere Threads desselben Prozesses können gleichzeitig ausgeführt werden
(3) Besitzressourcen: Ein Prozess ist eine unabhängige Einheit, die Ressourcen besitzt, aber auf Ressourcen zugreifen kann, die zum Prozess gehören.
(4) Systemaufwand: Beim Erstellen oder Abbrechen Bei einem Prozess muss das System Ressourcen zuweisen und recyceln, was dazu führt, dass der System-Overhead deutlich größer ist als der Overhead beim Erstellen oder Zerstören von Threads.
4. Wie kommuniziert man zwischen Prozessen?
(1) Pipe und Named Pipe: Pipes können für die Kommunikation zwischen übergeordneten und untergeordneten Prozessen verwendet werden, die eine Affinität haben. Zusätzlich zu den Funktionen einer Pipe ermöglicht eine Named Pipe auch die unabhängige Kommunikation zwischen relationalen Prozessen .
(2) Signal: Ein Signal ist eine Simulation des Interrupt-Mechanismus auf Softwareebene. Es handelt sich um eine relativ komplexe Kommunikationsmethode, mit der der Prozess darüber informiert wird, dass ein bestimmtes Ereignis eingetreten ist Das Signal und der Prozessor, der eine Interrupt-Anfrage empfängt, können als konsistent bezeichnet werden.
(3) Nachrichtenwarteschlange (Nachrichtenwarteschlange): Die Nachrichtenwarteschlange ist eine verknüpfte Liste von Nachrichten. Sie überwindet die Nachteile begrenzter Semaphoren in den beiden vorherigen Kommunikationsmethoden. Prozesse mit Schreibberechtigungen können ihnen entsprechend Nachrichten senden Zu bestimmten Regeln werden neue Informationen zur Nachrichtenwarteschlange hinzugefügt. Prozesse mit Leseberechtigungen für die Nachrichtenwarteschlange können Informationen aus der Nachrichtenwarteschlange lesen.
(4) Gemeinsamer Speicher: Man kann sagen, dass dies die nützlichste Methode zur prozessübergreifenden Kommunikation ist. Es ermöglicht mehreren Prozessen, auf denselben Speicherplatz zuzugreifen, und verschiedene Prozesse können Aktualisierungen der Daten im gemeinsam genutzten Speicher zeitnah im Prozess des jeweils anderen sehen. Diese Methode erfordert eine Art Synchronisationsvorgang, z. B. Mutex-Sperren und Semaphoren.
(5) Semaphor: Wird hauptsächlich als Mittel zur Synchronisierung und zum gegenseitigen Ausschluss zwischen Prozessen und zwischen verschiedenen Threads desselben Prozesses verwendet.
(6) Socket: Dies ist ein allgemeinerer prozessübergreifender Kommunikationsmechanismus. Er kann für die prozessübergreifende Kommunikation zwischen verschiedenen Maschinen im Netzwerk verwendet werden.
5. Der Unterschied zwischen Synchronisierung und gegenseitigem Ausschluss:
Wenn mehrere Threads vorhanden sind, ist es häufig erforderlich, diese Threads zu synchronisieren, um auf dieselben Daten oder Ressourcen zuzugreifen. Angenommen, es gibt ein Programm, in dem ein Thread zum Einlesen einer Datei in den Speicher und ein anderer Thread zum Zählen der Zeichen in der Datei verwendet wird. Natürlich macht es keinen Sinn, die gesamte Datei zu zählen, bis sie in den Speicher geladen wurde. Da jedoch jede Operation über einen eigenen Thread verfügt, behandelt das Betriebssystem die beiden Threads als unabhängige Aufgaben und führt sie separat aus, sodass die Wörter gezählt werden können, ohne die gesamte Datei in den Speicher laden zu müssen. Um dieses Problem zu lösen, müssen Sie dafür sorgen, dass beide Threads synchron arbeiten.
Die sogenannte Synchronisation bezieht sich auf mehrere Programmfragmente, die zwischen verschiedenen Prozessen laufen. Ihr Betrieb muss in strikter Übereinstimmung mit einer bestimmten festgelegten Reihenfolge ausgeführt werden. Wenn es im Hinblick auf den Zugriff auf Ressourcen definiert wird, bezieht sich Synchronisierung auf den geordneten Zugriff von Besuchern auf Ressourcen durch andere Mechanismen auf der Grundlage gegenseitigen Ausschlusses (in den meisten Fällen). In den meisten Fällen implementiert die Synchronisierung bereits einen gegenseitigen Ausschluss, insbesondere wenn sich alle Schreibvorgänge auf Ressourcen gegenseitig ausschließen müssen. In seltenen Fällen kann mehreren Besuchern gleichzeitig der Zugriff auf die Ressource gestattet werden.
Der sogenannte gegenseitige Ausschluss bezieht sich auf eine Reihe von Programmfragmenten, die auf verschiedene Prozesse verteilt sind. Wenn ein Prozess eines der Programmfragmente ausführt, können andere Prozesse keines davon ausführen. Sie können nur warten, bis der Prozess ausgeführt wird Ich habe die Ausführung dieses Programmfragments abgeschlossen, bevor ich es ausgeführt habe. Wenn eine sich gegenseitig ausschließende Ressource durch den Zugriff auf Ressourcen definiert wird, erlaubt sie jeweils nur einem Besucher, darauf zuzugreifen, was einzigartig und exklusiv ist. Aber gegenseitiger Ausschluss kann die Reihenfolge, in der Besucher auf Ressourcen zugreifen, nicht einschränken, d. h. der Zugriff ist ungeordnet.
Das Obige ist der gesamte Inhalt dieses Artikels, der hauptsächlich das relevante Wissen über Threads in Python vorstellt ist oben gesagt. Ich hoffe, dass das, was ich in diesem Artikel beschrieben habe, für Sie hilfreich ist und Ihnen das Erlernen von Python erleichtert. Weitere Informationen zu diesem Thema finden Sie in der Spalte
Python-Tutorialauf der chinesischen PHP-Website.
Das obige ist der detaillierte Inhalt vonWas sind Threads in Python? Zusammenfassung der Konzepte und Vorteile. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!