Mehrere Prozesse der gleichzeitigen Python-Programmierung (Theorie)

Verzeichnis:

  • 1. Was ist ein Prozess?
  • Zweitens der Unterschied zwischen Prozess und Programm
  • Drei, Parallelität und Parallelität
  • Viertens synchron \ asynchron und blockierend \ nicht blockierend (Hervorhebung)
  • Fünftens die Schaffung des Prozesses (verstehen)
  • Sechs, die Beendigung des Prozesses (verstehen)
  • Sieben, die Prozesshierarchie
  • Acht, der Stand des Prozesses
  • Neun, die Realisierung der Prozess-Parallelität (verstehen)

1. Was ist ein Prozess? 

Prozess: Ein laufender Prozess oder eine Aufgabe. Die CPU ist für die Ausführung der Aufgabe verantwortlich.

Beispiele (Einzelkern + mehrere Kanäle zur gleichzeitigen Ausführung mehrerer Prozesse):

egon hat in einem bestimmten Zeitraum viele Aufgaben zu erledigen: Aufgabe zur Vorbereitung des Python-Unterrichts, Aufgabe zum Schreiben von Büchern, Aufgabe zum Erstellen von Freundinnen, Aufgabe zum Ruhm des Königs,  

Aber egon kann immer nur eine Aufgabe gleichzeitig erledigen (CPU kann immer nur eine Aufgabe gleichzeitig erledigen). Wie können wir den Effekt spielen, wenn mehrere Aufgaben gleichzeitig ausgeführt werden?

egon bereitet eine Lektion vor, plaudert dann mit Li Jies Freundin und spielt dann wieder King Glory ... dies stellt sicher, dass jede Mission im Gange ist.

 

Technische Mehrkanalillustration:

Schlüsselkenntnisse der Multi-Channel-Technologie

Raum einnehmen und Zeit aufnehmen

  * Räumliches Multiplexen

    Mehrere Programme teilen sich eine Reihe von Computerhardware

  * Zeitmultiplexen

    Beispiel: Wäsche 30 Sekunden lang waschen, 50 Sekunden lang kochen, 30 Sekunden lang kochendes Wasser

      Ein Kanal benötigt 110 Sekunden, mehrere Kanäle benötigen nur einen mit längerer Aufgabe ===> Wechseln Sie, um Zeit zu sparen

    Beispiel: Spielen eines Spiels beim Essen ====> Status speichern

      Schalter + Speicherstatus

 

Drei-Zustands-Diagramm des laufenden Prozesses:

 

 

 

Zweitens der Unterschied zwischen Prozess und Programm:

Das Programm ist nur ein Stapel Code, und der Prozess bezieht sich auf den laufenden Prozess des Programms.

Beispiele:

Stellen Sie sich vor, egon, ein Informatiker mit guten Kochkünsten, backt eine Geburtstagstorte für seine Tochter Yuan Hao.

Er hat Rezepte für Geburtstagstorten,

Die Küche hat die notwendigen Zutaten: Mehl, Eier, Lauch, Knoblauch usw.

In dieser Analogie:

Das Rezept für die Herstellung eines Kuchens ist das Programm (dh der in geeigneter Form beschriebene Algorithmus).

Ein Informatiker ist ein Prozessor (CPU)

Die verschiedenen Rohstoffe für die Herstellung von Kuchen sind Eingabedaten.

Der Prozess ist die Summe einer Reihe von Aktionen, bei denen der Küchenchef das Rezept liest, verschiedene Zutaten nimmt und den Kuchen backt.

Nehmen wir nun an, Alex, der Sohn des Informatikers Egon, ist hereingelaufen und hat geweint und gesagt: XXXXXXXXXXXXXX .

Wissenschaftler Egon dachte darüber nach, die Aufgabe, mit dem Stich seines Sohnes Alex umzugehen, war wichtiger als die Aufgabe, Kuchen für seine Tochter Yuan Hao zu backen

Der Informatiker zeichnete auf, was er gemäß dem Rezept getan hatte (wobei der aktuelle Stand des Prozesses gespeichert wurde), nahm dann ein Erste-Hilfe-Handbuch heraus und behandelte den Stich gemäß den Anweisungen. Hier sehen wir, wie der Prozessor von einem Prozess (Kuchen backen) zu einem anderen Prozess mit hoher Priorität (medizinische Behandlung durchführen) wechselt. Jeder Prozess hat sein eigenes Programm (Rezept- und Erste-Hilfe-Handbuch). Nachdem der Bienenstich behandelt worden war, kam der Informatiker zurück, um Kuchen zu backen, und fuhr mit dem Schritt fort, als er ging.

Es sollte betont werden, dass dasselbe Programm zweimal ausgeführt wird, und das sind auch zwei Prozesse, wie das Öffnen des Sturmvideos, obwohl alle dieselbe Software sind, aber man kann War Wolf spielen und man kann länger als ein Jahr spielen.

Drei, Parallelität und Parallelität

Unabhängig davon, ob es parallel oder gleichzeitig ausgeführt wird, scheint es dem Benutzer, dass er gleichzeitig ausgeführt wird. Ob es sich um einen Prozess oder einen Thread handelt, es handelt sich nur um eine Aufgabe. Es ist wirklich die CPU, die CPU, die diese Aufgaben ausführt, und eine CPU kann dies nur gleichzeitig tun. Führen Sie eine Aufgabe aus

* Parallelität Es 
  sieht so aus, als ob es gleichzeitig ausgeführt werden kann, wenn es gleichzeitig ausgeführt wird.

 * Parallel im 
  wahrsten Sinne der gleichzeitigen Ausführung von 

ps:

 * Parallel ist definitiv Parallelität
 * Single-Core-Computer können sicherlich keine Parallelität erreichen, aber sie können Parallelität erreichen! ! !

 

1. Parallelität: Es ist pseudo-parallel, das heißt, es scheint gleichzeitig zu laufen. Eine einzelne CPU + Mehrkanal-Technologie kann Parallelität erreichen (parallel gehört auch zur Parallelität)

Einzelne CPU, mehrere Prozesse, gleichzeitiges Beispiel 1:

Du bist eine CPU, du sprichst über drei Freundinnen gleichzeitig, jede kann eine Liebesaufgabe sein, du wirst von diesen drei Aufgaben geteilt 
Um den Effekt der gleichzeitigen Liebe zu spielen, 
solltest du zuerst mit deiner Freundin 1 ins Kino gehen und zuschauen Nach einer Weile sagte ich: Nein, ich möchte Durchfall haben und rannte dann mit meiner zweiten Freundin essen, und nach einer Weile sagte ich: Dann ging ich 
ins Badezimmer und führte dann ein Zimmer mit meiner Freundin 3

Einzel-CPU, Multi-Prozess, gleichzeitiges Beispiel zwei:

Eines Nachmittags stimmten Egon, Yuanhao, Wupeiqi und Alex zu, gemeinsam Prostituierte zu werden, aber es gibt nur eine Prostituierte und nur eine CPU, aber sie müssen 
vier Aufgaben "gleichzeitig" erledigen. Egon für eine Weile, Yuanyuan für eine Weile, Wupeiqi für eine Weile und 
Alex für eine Weile Egon: Es kostet 200 Yuan, weil die Menschen gut leben. 
Yuanhao: 500 Yuan für 
Wupeiqi: 100 Yuan, vielleicht ist es nicht 
Alex : Kein Geld, warum? ? ? Weil jeder gerade seine Freundin geheiratet hat

Zweitens parallel: gleichzeitig ausgeführt, nur mit mehreren CPUs kann parallel erreicht werden

Unter Single Core können Sie Mehrkanaltechnologie und mehrere Kerne verwenden. Jeder Kern kann auch Mehrkanaltechnologie verwenden ( Mehrkanaltechnologie gilt für Single Core ).

Es gibt vier Kerne und sechs Aufgaben, sodass vier Aufgaben gleichzeitig ausgeführt werden, vorausgesetzt, sie sind CPU1, CPU2, CPU3, CPU4 zugeordnet

Sobald Task 1 auf E / A stößt, muss er die Ausführung unterbrechen. Zu diesem Zeitpunkt erhält Task 5 die Zeitscheibe für die Ausführung von CPU1. Dies ist die Mehrkanaltechnologie unter einem Kern

Und sobald die E / A von Aufgabe 1 beendet ist, ruft das Betriebssystem sie erneut auf (Sie müssen die Planung des Prozesses kennen, dessen Ausführung der CPU zugewiesen ist, es liegt am Betriebssystem ) und kann jeder der vier CPUs zugewiesen werden Ausführen

 

 

 

Alle modernen Computer erledigen oft viele Dinge gleichzeitig. Der PC eines Benutzers (ob es sich um eine einzelne CPU oder mehrere CPUs handelt) kann mehrere Aufgaben gleichzeitig ausführen (eine Aufgabe kann als Prozess verstanden werden).

Starten Sie einen Prozess zum Abtöten von Viren (360-Software)

Starten Sie einen Prozess zum Ansehen des Films (Storm Video)

Starten Sie einen Chat-Prozess (Tencent QQ)

Alle diese Prozesse müssen verwaltet werden. Daher ist ein System mit mehreren Programmen, das mehrere Prozesse unterstützt, unerlässlich

Überprüfung der Mehrkanal-Technologiekonzepte: Mehrere (mehrere) Programme werden gleichzeitig im Speicher gespeichert, und die CPU wechselt schnell von einem Prozess zum anderen, sodass jeder Prozess für zehn oder Hunderte von Millisekunden einzeln ausgeführt wird. Eine CPU kann nur eine Aufgabe ausführen, aber innerhalb von 1 Sekunde kann die CPU mehrere Prozesse ausführen, was die Illusion von Parallelität, dh Pseudo-Parallelität, erzeugt, um die wahre Hardware-Parallelität von Multiprozessor-Betriebssystemen zu unterscheiden ( Mehrere CPUs teilen sich den gleichen physischen Speicher.

Viertens synchron \ asynchron und blockierend \ nicht blockierend (Hervorhebung)

Beschreiben Sie, wie Aufgaben eingereicht werden:

Synchronisation:

#Die sogenannte Synchronisation bedeutet, dass bei einem Funktionsaufruf der Aufruf erst dann zurückgegeben wird, wenn das Ergebnis vorliegt. 
Nach dieser Definition werden die meisten Funktionen synchron aufgerufen. Wenn wir jedoch über synchron und asynchron sprechen, beziehen wir uns im Allgemeinen speziell auf Aufgaben, bei denen andere Komponenten zusammenarbeiten müssen oder deren Ausführung eine bestimmte Zeit in Anspruch nimmt.
(Synchronisation nach der Aufgabe gestellt, Rückkehr in ihre Heimat für die Ergebnisse der Aufgabe zu warten, wird der Prozess des Wartens tut nichts (trocken, etc.), und in der Programmebene Programm klemmt) beliebte Worte
# Beispiele: # 1. Multiprozessing. nach # gilt in Pool synchronem Aufruf initiiert, für das Ende des Mandats an Ort und Stelle warten, berücksichtigt nicht die Aufgabe , Berechnung oder Behinderung in io ist, kurz gesagt, ist kategorisch Aufgaben enden wie # 2. concurrent.futures.ProcessPoolExecutor (). das Senden ( func,). result () # 3. concurrent.futures.ThreadPoolExecutor (). submit (func,). result ()

Asynchron:

# Asynchrone und synchrone relativer Begriff. Wenn ein asynchroner Funktionsaufruf ausgegeben wird, kann der Aufrufer das Ergebnis nicht sofort erhalten. Wenn die asynchrone Funktion abgeschlossen ist, wird der Anrufer durch Status, Benachrichtigung oder Rückruf benachrichtigt. 
Wenn die asynchrone Funktion nach Status benachrichtigt wird, muss der Aufrufer sie jedes Mal überprüfen, und die Effizienz ist sehr gering (einige Leute, die mit Multithread-Programmierung noch nicht vertraut sind, verwenden immer gerne eine Schleife, um den Wert einer Variablen zu überprüfen, die tatsächlich eine ist Ein sehr schwerwiegender Fehler).
Wenn Sie die Benachrichtigungsmethode verwenden, ist die Effizienz sehr hoch, da die asynchrone Funktion kaum zusätzliche Operationen ausführen muss. Die Rückruffunktion unterscheidet sich nicht wesentlich von der Benachrichtigung.
Beliebtes Gespräch (nach der asynchronen Aufgabe gestellt, kein Platz Rückkehr für die Ergebnisse der Aufgabe andere Dinge zu tun direkt zu warten, als Folge wird es für die automatische Verarbeitung eine Rückkehr zur Aufgabe asynchronen Callback - Mechanismus sein)
# Beispiel: # 1. multiprocessing.Pool (). apply_async () #Nach dem Initiieren eines asynchronen Aufrufs wird nicht gewartet, bis die Aufgabe beendet ist, bevor sie zurückgegeben wird. Stattdessen wird sofort ein temporäres Ergebnis abgerufen (nicht das Endergebnis, bei dem es sich möglicherweise um ein gekapseltes Objekt handelt). # 2. concurrent.futures.ProcessPoolExecutor (3) .submit (func,) # 3. concurrent.futures.ThreadPoolExecutor (3) .submit (func,)

Beschreiben Sie den laufenden Status des Programms

Blockieren:

# Blockierende Aufruf Mittel vor dem Aufruf zurückkehrt, wird der aktuelle Thread (bei Betrieb io) suspendiert. Die Funktion aktiviert den blockierten Thread erst nach Erhalt des Ergebnisses. Einige Leute setzen das Blockieren von Anrufen möglicherweise mit synchronen Anrufen gleich, aber tatsächlich sind sie unterschiedlich. 
Bei synchronen Aufrufen ist der aktuelle Thread häufig noch aktiviert, die aktuelle Funktion wird jedoch nicht logisch zurückgegeben.
# 例 : # 1. Synchroner Aufruf: Wenden Sie eine Aufgabe insgesamt 100 Millionen Mal an. Der Aufruf wartet, bis die Aufgabe das Ergebnis zurückgibt, wird jedoch nicht blockiert (selbst wenn die Ausführungsberechtigung der CPU beraubt wird, befindet sie sich noch in Vorbereitung State); # 2. Blocking Call: Wenn der Socket im Blocking-Modus arbeitet und die Recv-Funktion aufgerufen wird, wenn keine Daten vorhanden sind, wird der aktuelle Thread angehalten, bis Daten vorhanden sind.

Nicht blockierend:

# Nicht blockierend entspricht dem Konzept des Blockierens, dh es wird sofort zurückgegeben, bevor das Ergebnis nicht sofort abgerufen werden kann, und die Funktion blockiert den aktuellen Thread nicht.

Zusammenfassung:

# 1. Synchronisation und Asynchronität beziehen sich auf die aufrufende Methode von Funktionen / Aufgaben: Synchronisation bedeutet, dass ein Prozess, wenn er einen Funktionsaufruf (Aufgabe) initiiert, wartet, bis die Funktion (Aufgabe) abgeschlossen ist und der Prozess weiterhin in einem aktiven Zustand ist. Im asynchronen Fall wartet ein Prozess, wenn er einen Funktionsaufruf (Taskaufruf) initiiert, nicht auf die Rückkehr der Funktion, sondern wird weiter ausgeführt. Wenn die Funktion zurückkehrt, wird der Prozess über Status, Benachrichtigung, Ereignis usw. über den Abschluss der Task informiert. 

# 2. Blockieren und Nichtblockieren gelten für Prozesse oder Threads: Durch Blockieren wird der Prozess angehalten, wenn die Anforderung nicht erfüllt werden kann, und durch Nichtblockieren wird der aktuelle Prozess nicht blockiert

Fünftens die Schaffung des Prozesses (verstehen)

Für die gesamte Hardware ist jedoch ein Betriebssystem erforderlich. Solange es ein Betriebssystem gibt, gibt es ein Konzept für einen Prozess und eine Möglichkeit, einen Prozess zu erstellen. Einige Betriebssysteme sind nur für eine Anwendung ausgelegt, z. B. eine Steuerung in einem Mikrowellenherd, sobald sie gestartet wurde Mikrowellenherde, alle Prozesse existieren bereits.

Für ein Allzwecksystem (mit vielen Anwendungen) ist die Fähigkeit erforderlich, Prozesse während des Systembetriebs zu erstellen oder abzubrechen, die hauptsächlich in vier Formulare unterteilt sind, um neue Prozesse zu erstellen

1. Systeminitialisierung (Prozess mit dem Befehl ps unter Linux anzeigen, Task-Manager in Windows, der Vordergrundprozess ist für die Interaktion mit dem Benutzer verantwortlich, der im Hintergrund ausgeführte Prozess hat nichts mit dem Benutzer zu tun, der Prozess läuft im Hintergrund und wird nur bei Bedarf aktiviert, aufgerufen Dämonen wie E-Mail, Webseiten, Nachrichten, Druck)

2. Ein Prozess hat während des laufenden Prozesses einen Unterprozess geöffnet (z. B. nginx open multi process, os.fork, subprocess.Popen usw.).

3. Die interaktive Anforderung des Benutzers zum Erstellen eines neuen Prozesses (z. B. Doppelklicken des Benutzers auf Storm Video)

4. Initialisierung eines Batch-Jobs (wird nur im Mainframe-Batch-System verwendet)

In beiden Fällen wird die Erstellung eines neuen Prozesses von einem vorhandenen Prozess erstellt, der einen Systemaufruf ausführt, um den Prozess zu erstellen:

1. Unter UNIX lautet der Systemaufruf: fork, fork erstellt eine exakte Kopie des übergeordneten Prozesses, die beiden haben dasselbe Speicherabbild, dieselbe Umgebungszeichenfolge und dieselbe geöffnete Datei (im Shell-Interpreter-Prozess ausführen Ein Befehl erstellt einen untergeordneten Prozess.

2. Der Systemaufruf in Windows lautet: CreateProcess, CreateProcess übernimmt nicht nur die Prozesserstellung, sondern ist auch für das Laden des richtigen Programms in den neuen Prozess verantwortlich. 

Informationen zum erstellten untergeordneten Prozess, UNIX und Windows

1. Das Gleiche gilt: Nachdem der Prozess erstellt wurde, haben der übergeordnete Prozess und der untergeordnete Prozess ihre eigenen unterschiedlichen Adressräume (für die Mehrkanaltechnologie ist eine physische Schicht erforderlich, um eine Speicherisolation zwischen Prozessen zu erreichen), und alle Prozesse im Adressraum werden nicht geändert Beeinflusst einen anderen Prozess.

2. Der Unterschied besteht darin, dass unter UNIX der anfängliche Adressraum des untergeordneten Prozesses eine Kopie des übergeordneten Prozesses ist. Hinweis: Der untergeordnete Prozess und der übergeordnete Prozess können einen schreibgeschützten gemeinsamen Speicherbereich haben. Für das Windows-System unterscheidet sich der Adressraum des übergeordneten und des untergeordneten Prozesses von Anfang an.

Sechs, die Beendigung des Prozesses

1. Normales Beenden (freiwillig, z. B. wenn der Benutzer auf der interaktiven Seite auf das Kreuz klickt oder die Programmausführung abgeschlossen ist, wird der Systemaufruf aufgerufen, um das normale Beenden einzuleiten, das Beenden unter Linux zu verwenden und ExitProcess in Windows)

2. Beenden Sie mit Fehler (freiwillig existiert a.py nicht in Python a.py)

3. Schwerwiegende Fehler (unfreiwillig, Ausführung unzulässiger Anweisungen, wie das Verweisen auf nicht vorhandenen Speicher, 1/0 usw., können Ausnahmen abfangen, versuchen ... außer ...)

4. Durch andere Prozesse getötet (unfreiwillig, wie z. B. töten -9)

Sieben, die Prozesshierarchie

Unabhängig von UNIX oder Windows hat der Prozess nur einen übergeordneten Prozess. Der Unterschied ist:

1. Alle Prozesse unter UNIX verwenden den Init-Prozess als Stamm, um eine Baumstruktur zu bilden. Die übergeordneten und untergeordneten Prozesse bilden zusammen eine Prozessgruppe, sodass beim Senden eines Signals von der Tastatur das Signal an alle Mitglieder der aktuellen Prozessgruppe gesendet wird, die der Tastatur zugeordnet sind.

2. In Windows gibt es kein Konzept für die Prozesshierarchie. Alle Prozesse haben denselben Status. Der einzige Hinweis, der der Prozesshierarchie ähnelt, ist, dass der übergeordnete Prozess beim Erstellen eines Prozesses ein spezielles Token (Handle genannt) erhält. Das Handle kann zur Steuerung des untergeordneten Prozesses verwendet werden, der übergeordnete Prozess hat jedoch das Recht, das Handle an andere untergeordnete Prozesse zu übergeben, sodass keine Hierarchie vorhanden ist.

Acht, der Stand des Prozesses

tail -f access.log |grep '404'

Führen Sie das Programmende aus, starten Sie einen Unterprozess, führen Sie das Programm grep aus, starten Sie einen anderen Unterprozess, basierend auf der Pipeline-Kommunikation '|' zwischen den beiden Prozessen, und verwenden Sie das Ergebnis von tail als Eingabe von grep.

Der Status des Prozesses grep während des Wartens auf Eingabe (dh E / A) wird als Blockieren bezeichnet. Zu diesem Zeitpunkt kann der Befehl grep nicht ausgeführt werden.

In zwei Fällen kann ein Prozess nicht logisch ausgeführt werden.

1. Der Prozess wird aus eigenen Gründen angehalten. Wenn E / A blockiert ist, muss die CPU freigegeben werden, damit andere Prozesse ausgeführt werden können, um sicherzustellen, dass die CPU funktioniert.

2. Es hat nichts mit dem Prozess zu tun. Es befindet sich auf Betriebssystemebene und kann andere Prozesse aufrufen, um die CPU zu verwenden, da ein Prozess zu viel Zeit oder Priorität in Anspruch nimmt.

Ein Prozess besteht also aus drei Zuständen

 

 

 Neun, die Realisierung der Prozess-Parallelität

Die Realisierung der Prozessgleichzeitigkeit besteht darin, dass die Hardware einen laufenden Prozess unterbricht und den gesamten Status des Prozesses zu diesem Zeitpunkt speichert. Aus diesem Grund verwaltet das Betriebssystem eine Tabelle, dh die Prozesstabelle (Prozesstabelle), wobei jeder Prozess eine Prozesstabelle belegt Elemente (diese Tabellenelemente werden auch als Prozesssteuerungsblöcke bezeichnet)

 

 In dieser Tabelle werden wichtige Informationen zum Status des Prozesses gespeichert: Programmzähler, Stapelzeiger, Speicherzuordnungsstatus, Status aller geöffneten Dateien, Konto- und Planungsinformationen sowie andere Informationen, die gespeichert werden müssen, wenn der Prozess von "Ausführen" auf "Bereit" oder "Blockiert" wechselt Informationen, um sicherzustellen, dass der Prozess erneut gestartet wird, als wäre er nie unterbrochen worden.

 

Ich denke du magst

Origin www.cnblogs.com/baicai37/p/12752696.html
Empfohlen
Rangfolge