Der Unterschied zwischen Python-Thread-Pool und Multithreading: 1. Threads durchlaufen den Prozess; 3. Ein Prozess kann mehrere Threads enthalten; 4. Es ist schwierig, Daten zwischen verschiedenen Prozessen zu teilen; . Prozess Verbraucht mehr Computerressourcen als Threads.
1. Threads und Multi-Threads
Prozess: Wenn ein Programm ausgeführt wird, kann es als Prozess bezeichnet werden, der das laufende Programm sowie die vom Programm verwendeten Speicher- und Systemressourcen umfasst Mehrere Threads bestehen aus.
Thread: Ein Thread ist ein Ausführungsablauf in einem Programm. Jeder Thread verfügt über ein eigenes privates Register, und der Codebereich wird gemeinsam genutzt.
Multithreading: Multithreading bedeutet, dass ein Programm mehrere Ausführungsströme enthält, d. h. ein Programm kann mehrere verschiedene Threads gleichzeitig ausführen, um unterschiedliche Aufgaben auszuführen, sodass ein einzelnes Programm mehrere parallele Ausführungsthreads erstellen kann, um ihre jeweiligen Aufgaben zu erledigen.
Das größter Vorteil von Multithreading: Verbesserung der CPU-Auslastung (besonders geeignet für I/O-intensive Programme, die Geschwindigkeitsverbesserung ist besonders offensichtlich)
Der Unterschied zwischen Prozessen und Threads:
Eine einfache Metapher: Prozess = Zug, Thread = Wagen
Threads laufen unter dem Prozess (ein einfacher Wagen kann nicht laufen)
Ein Prozess kann mehrere Threads enthalten (ein Zug kann mehrere Wagen haben)
Es ist schwierig, Daten zwischen verschiedenen Prozessen auszutauschen (es ist schwierig für Fahrgäste in einem Zug Wechsel in einen anderen Zug, z. B. Bahnhofstransfer)
Daten können problemlos zwischen verschiedenen Threads im selben Prozess ausgetauscht werden (es ist einfach, von Waggon A zu Waggon B zu wechseln)
Prozesse verbrauchen mehr Computerressourcen als Threads (unter Verwendung mehrerer Züge Züge verbrauchen mehr Ressourcen als mehrere Waggons)
Die Prozesse wirken sich nicht gegenseitig aus. Wenn ein Thread hängen bleibt, bleibt der gesamte Prozess hängen (ein Zug hat keinen Einfluss auf einen anderen Zug, aber wenn der mittlere Wagen in einem Zug ist, wird es zu einem Brand kommen alle Waggons)
Der Prozess kann auf mehrere Maschinen erweitert werden, und der Prozess ist höchstens für Mehrkerne geeignet (verschiedene Züge können auf mehreren Gleisen fahren, und die Waggons desselben Zuges können sich nicht auf unterschiedlichen Gleisen befinden)
Prozess verwenden Die Speicheradresse kann gesperrt werden. Wenn also ein Thread gemeinsam genutzten Speicher verwendet, müssen andere Threads warten, bis dieser Speicher beendet ist, bevor sie diesen Speicher verwenden können. (Zum Beispiel die Toilette im Zug) - „Mutex-Sperre“
Die vom Prozess verwendete Speicheradresse kann die Nutzung einschränken (z. B. ein Restaurant im Zug, es darf nur eine maximale Anzahl von Personen eintreten, wenn es ist voll, Sie müssen an der Tür warten, bis jemand herauskommt Die Vorgehensweise zum Erstellen eines Threads lautet wie folgt:
threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
Gruppe: Der Name der ausgeführten Funktion darf nicht in Klammern gesetzt werden.
Name: Thread-Name, standardmäßig ist „Thread-N“. ' Form.
args: Parametertupel des im Parameterziel übergebenen aufrufbaren Objekts
daemon: Guardian-Modus-Attribut, der Standardwert ist „Keine“.
Wichtige Methoden des Thread-Objekts: start(): Dadurch wird die run()-Methode in einem unabhängigen Thread aufgerufen. run(): Diese Methode stellt die Thread-Aktivität dar Keine): Lassen Sie den aktuellen Aufruf-Thread warten, bis der Thread endet. Daemon: Stellt dar, ob der Thread ein Daemon-Thread ist, wahr oder falsch.Erstellen Sie eine Multithread-Instanz:import random import threading import time def awesome_function(name): wait_time = random.randint(1, 10) print('current thread name is :{0} and wait {1} s'.format(name, wait_time)) time.sleep(wait_time) print('thread {} finished.'.format(name)) if __name__ == '__main__': for i in range(0, 3): t = threading.Thread(target=awesome_function, args=(i,)) t.start()
import random import time from concurrent.futures import ThreadPoolExecutor def awesome_function(name): wait_time = random.randint(1, 10) print('current thread name is :{0} and wait {1} s'.format(name, wait_time)) time.sleep(wait_time) print('thread {} finished.'.format(name)) if __name__ == '__main__': with ThreadPoolExecutor(max_workers=3) as t: for i in range(0, 3): t.submit(awesome_function, i)
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Python-Thread-Pool und Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!