Heim > Artikel > Backend-Entwicklung > Was ist der Unterschied zwischen Threads und Prozessen in der Go-Sprache?
Unterschied: 1. Thread ist die kleinste Einheit der Programmausführung, während Prozess die kleinste Einheit von Ressourcen ist, die vom Betriebssystem zugewiesen werden. 2. Ein Prozess besteht aus einem oder mehreren Threads. Threads sind verschiedene Ausführungsrouten von Code in einem Prozess. 3. Der Thread-Kontextwechsel ist viel schneller als der Prozesskontextwechsel. 4. Der Prozesswechsel erfordert maximale Ressourcen und ist sehr ineffizient. Der Threadwechsel erfordert durchschnittliche Ressourcen und weist eine durchschnittliche Effizienz auf. 5. Der Prozess verfügt über einen eigenen Stapel, der nicht von mehreren Prozessen gemeinsam genutzt wird. Der Thread verfügt über einen eigenen Stapel und teilt sich den Heap.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.
Ein Prozess
Der Prozess hat seinen eigenen Stapel, der Stapel wird nicht von Prozessen gemeinsam genutzt und wird vom Betriebssystem geplant.
bezieht sich auf die Integration mehrerer
RechenkerneKernel-Thread
Jeder Verarbeitungskern entspricht einem Kernel-Thread. Zum Beispiel:
Ein Single-Core-Prozessor entspricht einem Kernel-Thread
Ein Dual-Core-Prozessor entspricht zwei Kernel-ThreadsDerzeit verwenden Prozessoren die
Hyper-Threading-Technologiein zwei
logische VerarbeitungskerneIm Betriebssystem sehen wir, dass die Anzahl der CPUs doppelt so hoch ist wie die Anzahl der tatsächlichen physischen CPUs. Beispielsweise können Dual-Core- und Vier-Thread-Prozessoren 4 CPUs sehen.
In herkömmlichen Anwendungen wird normalerweise ein Thread für Netzwerkanforderungen erstellt, um die Geschäftslogik zu vervollständigen. Bei mehreren Anfragen werden mehrere Threads erstellt.
Wenn zeitaufwändiges E/A-Verhalten auftritt, befindet sich der Thread immer in einem blockierten Zustand (und wartet darauf, dass der Thread die Ausführung abschließt), was zu einer unvollständigen Ressourcenanwendung führt. die Durchsatzkapazität des Systems nimmt ab.
Das häufigste zeitaufwändige E/A-Verhalten ist wie bei JDBC. Die CPU wartet immer auf die Rückkehr des Daten-E/A-Vorgangs. Zu diesem Zeitpunkt verwendet der Thread die CPU überhaupt nicht, um Vorgänge auszuführen. befindet sich aber im Ruhezustand. Die gleichzeitige Verwendung zu vieler Threads führt auch zu einem höheren Kontextwechselaufwand.
Es gibt zwei Lösungen für die oben genannten Probleme:
Eigenschaften von CoroutinenThreadwechsel werden vom Betriebssystem geplant, und Coroutinen werden vom Benutzer selbst geplant, sodass der Kontextwechsel reduziert und die Effizienz verbessert wird
Das Prinzip der Coroutine Scheduler der Coroutine Durch sofortiges Übergeben des Datenstroms (aktives Aufgeben) und Aufzeichnen der Daten auf dem aktuellen Stapel
Nach Abschluss der Blockierung wird der Stapel sofort über den Thread wiederhergestellt und das Blockierungsergebnis angezeigt wird in diesen Thread gestellt, umWeil die Aussetzung der Coroutine vollständig vom Programm gesteuert wird und im Benutzerstatus erfolgt, während der Blockierungsstatus des Threads vom Betriebssystemkernel geändert wird und im Kernelstatus auftritt.
Daher ist der Overhead von Coroutinen viel geringer als der von Threads, und es gibt keinen Overhead für den Kontextwechsel.Coroutine
负责调度的线程称为Fiber
,比如Golang里的go
关键字其实就是负责开启一个Fiber
,让func
Vergleichselemente
Anfangseinheit ist 1 MB, fest und unveränderlich | Die Anfangsgröße beträgt normalerweise 2 KB , kann nach Bedarf erhöht werden ), 16 Register, PC, Refreshing SP und andere Register Leistungsprobleme | Die Ressourcennutzung ist gering und führt nicht zu ernsthaften Leistungsproblemen |
---|---|---|
Erfordert Mechanismen wie Sperren, um Datenkonsistenz und -sichtbarkeit sicherzustellen | Erfordert keinen Multithread-Sperrmechanismus, daher gibt es einen nur ein Thread. Es gibt keinen Konflikt beim gleichzeitigen Schreiben von Variablen. Sie müssen nur den Status bestimmen, sodass die Ausführungseffizienz viel höher ist als bei Threads. [Verwandte Empfehlungen: | Go-Video-Tutorial | ,
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Threads und Prozessen in der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!