Threads und Prozesse
Threads und Prozesse sind Begriffe im Betriebssystem. Vereinfacht gesagt hat jede Anwendung ihren eigenen Prozess.
Das Betriebssystem weist diesen Prozessen einige Ausführungsressourcen zu, beispielsweise Speicherplatz. Dabei können einige Threads erstellt werden, die sich diese Speicherplätze teilen und vom Betriebssystem zum parallelen Rechnen aufgerufen werden.
Wir alle wissen, dass moderne Betriebssysteme wie Mac OS X, UNIX, Linux, Windows usw. mehrere Aufgaben gleichzeitig ausführen können. Sie surfen beispielsweise mit einem Browser im Internet, geben Code ein und schreiben einen Blog in Markdown. Dabei werden mindestens drei Aufgaben gleichzeitig ausgeführt. Natürlich laufen viele Aufgaben still und leise gleichzeitig im Hintergrund, werden aber nicht auf dem Desktop angezeigt. Für das Betriebssystem ist eine Aufgabe ein Prozess. Das Öffnen eines Browsers bedeutet beispielsweise das Starten eines Browserprozesses, das Öffnen von PyCharm bedeutet das Starten eines PtCharm-Prozesses und das Öffnen von Markdown bedeutet das Starten eines Md-Prozesses.
Obwohl Multi-Core-CPUs mittlerweile sehr beliebt sind. Da der CPU-Ausführungscode jedoch sequentiell ausgeführt wird, werden wir zu diesem Zeitpunkt Fragen haben: Wie führt eine Single-Core-CPU mehrere Aufgaben aus?
Tatsächlich führt das Betriebssystem abwechselnd jede Aufgabe aus: Aufgabe 1 wird 0,01 Sekunden lang ausgeführt, wechselt zu Aufgabe 2, Aufgabe 2 wird 0,01 Sekunden lang ausgeführt und wechselt dann zu Aufgabe 3, die ausgeführt wird 0,01 Sekunden ... und so weiter. Oberflächlich betrachtet wird jede Aufgabe abwechselnd ausgeführt. Da die Ausführungsgeschwindigkeit der CPU jedoch so hoch ist, können wir sie mit bloßem Auge nicht erkennen und nicht das Gefühl haben, dass alle Aufgaben gleichzeitig ausgeführt werden.
Eine echte parallele Ausführung von Multitasking kann nur auf einer Multi-Core-CPU erreicht werden. Da jedoch die Anzahl der Aufgaben die Anzahl der CPU-Kerne bei weitem übersteigt, plant das Betriebssystem automatisch viele Aufgaben nacheinander . Auf jedem Kern ausführen.
Einige Prozesse dienen nicht nur einer Sache, z. B. Browsern. Wir können Videos abspielen, Audios abspielen, Artikel lesen, Artikel bearbeiten usw. Tatsächlich sind dies alles Teilaufgaben des Browserprozesses . Wenn Sie innerhalb eines Prozesses mehrere Dinge gleichzeitig erledigen möchten, müssen Sie mehrere „Unteraufgaben“ gleichzeitig ausführen. Wir nennen diese „Unteraufgaben“ innerhalb der Prozess-Threads.
Da jeder Prozess mindestens eine Sache tun muss, hat ein Prozess mindestens einen Thread. Natürlich kann ein Prozess auch mehrere Threads haben und mehrere Threads können gleichzeitig ausgeführt werden. Die Ausführungsmethode von Multithreading ist die gleiche wie bei mehreren Prozessen. Das Betriebssystem wechselt auch schnell zwischen mehreren Threads Der Thread wird vorübergehend abwechselnd ausgeführt und es sieht so aus, als würden sie gleichzeitig ausgeführt.
Was sollen wir also tun, wenn wir in Python mehrere Aufgaben gleichzeitig ausführen möchten?
Es gibt zwei Lösungen:
Eine besteht darin, mehrere Prozesse zu starten. Obwohl jeder Prozess nur einen Thread hat, können mehrere Prozesse gleichzeitig ausgeführt werden.
Eine andere Methode besteht darin, einen Prozess zu starten und mehrere Threads in einem Prozess zu starten, sodass mehrere Threads mehrere Aufgaben gemeinsam ausführen können.
Natürlich gibt es eine dritte Methode, bei der mehrere Prozesse gestartet werden und jeder Prozess mehrere Threads startet, sodass mehr Aufgaben gleichzeitig ausgeführt werden können. Dieses Modell ist natürlich komplexer und wird selten verwendet üben.
Zusammenfassend gibt es drei Möglichkeiten, Multitasking zu implementieren:
Multiprozessmodus;
Multi-Thread-Modus; >
Multiprozess Multithread-Modus. Führen Sie mehrere Aufgaben gleichzeitig aus, sondern müssen miteinander kommunizieren und koordinieren. Manchmal muss Aufgabe 1 anhalten und warten, bis Aufgabe 2 abgeschlossen ist, bevor sie weiter ausgeführt werden kann Manchmal können Aufgabe 3 und Aufgabe 4 nicht gleichzeitig ausgeführt werden, sodass die Komplexität von Multiprozess- und Multithread-Programmen viel höher ist als die von Einzelprozess- und Single-Thread-Programmen, die wir zuvor geschrieben haben. Aufgrund der hohen Komplexität und Schwierigkeit beim Debuggen möchten wir kein Multitasking schreiben, es sei denn, es muss sein. Allerdings kommt es oft vor, dass auf Multitasking nicht verzichtet werden kann. Denken Sie daran, einen Film auf einem Computer anzusehen. Ein Thread muss das Video und ein anderer Thread den Ton abspielen. Andernfalls kann bei der Implementierung in einem einzelnen Thread nur das Video und dann der Ton abgespielt werden, oder der Ton muss zuerst abgespielt werden und dann das Video. Das ist offensichtlich nicht möglich.