


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.
Was sind Threads und Prozesse?
Ein Prozess
- ist ein Programm mit bestimmten unabhängigen Funktionen. Ein dynamischer Ausführungsprozess auf einem Datensatz der Anwendungsausführung Ein Prozess kann einen oder mehrere Threads haben. Der Speicherplatz des Programms wird von jedem Thread gemeinsam genutzt Methode . Die Planungsmethode ist wie folgt:
- Wenn in einem Prozess eine Thread-Aufgabe einige Millisekunden lang ausgeführt wird, wird sie vom Betriebssystemkernel geplant.
- Der Unterschied zwischen Prozessen und Threads
Ein Thread ist die kleinste Einheit der Programmausführung, während ein Prozess die kleinste Einheit von Ressourcen ist, die vom Betriebssystem zugewiesen werden.Ein Prozess besteht Threads sind unterschiedliche Ausführungsrouten von Code in einem Prozess. Thread-Kontextwechsel sind viel schneller als Prozesskontextwechsel. Prozesswechsel erfordern die größten Ressourcen und sind sehr ineffizient und durchschnittlicher Effizienz.
Der Prozess hat seinen eigenen Stapel, der Stapel wird nicht von Prozessen gemeinsam genutzt und wird vom Betriebssystem geplant.
- Multi-Threading und Multi-Core
- Multi-Core-Prozessor
bezieht sich auf die Integration mehrerer
Rechenkerne auf einem Prozessor, um die Rechenleistung zu verbessern. Das heißt, es gibt mehrere Verarbeitungskerne für echtes Parallelrechnen, und jeder Verarbeitungskern entspricht einem Kernel-Thread. Kernel-Thread
Jeder Verarbeitungskern entspricht einem Kernel-Thread. Zum Beispiel:
Ein Single-Core-Prozessor entspricht einem Kernel-Thread
Ein Quad-Core-Prozessor entspricht vier Kernel-Threads Kernel Thread (KLT) wird direkt durch Threads dargestellt, die vom Betriebssystemkernel unterstützt werden. Der Thread wird vom Kernel umgeschaltet, indem er den Scheduler betreibt und für die Zuordnung der Thread-Aufgaben zu jedem Prozessor verantwortlich ist.
- Hyper-Threading-Technologie
-
Derzeit verwenden Prozessoren die
Hyper-Threading-Technologie , um einen - physischen Verarbeitungskern
in zwei
logische Verarbeitungskerne , also zwei Kernel-Threads, zu simulieren. - Die Computer, die wir sehen, sind also im Allgemeinen Dual-Core-, Vier-Thread- oder Vier-Core-, Acht-Thread-Computer.
Im 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.
Zum Beispiel ist der MBP, über den ich gerade den Artikel schreibe, ein i7 6-Core 12-Thread: - Programme verwenden im Allgemeinen keine Kernel-Threads direkt, sondern eine High-Level-Schnittstelle von Kernel-Threads – Lightweight Prozess, LWP), den wir oft „Thread“ nennen.
Coroutinen
Coroutinen basieren auf Threads und sind leichter als Threads. Ein Thread kann mehrere Coroutinen haben.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:
- Einzelner Thread plus asynchroner Rückruf
Zum Beispiel Node.js, Javas Vert. Geben Sie die aktuelle Coroutine-Planung auf und führen Sie die nächste Aufgabe aus, um den Overhead von ContexSwith zu eliminieren -
Eigenschaften von CoroutinenThreadwechsel werden vom Betriebssystem geplant, und Coroutinen werden vom Benutzer selbst geplant, sodass der Kontextwechsel reduziert und die Effizienz verbessert wird
- Die Standardstapelgröße des Threads beträgt 1 MB , während die Coroutine leichter ist und nahe bei 1K liegt. Daher können mehr Coroutinen im selben Speicher geöffnet werden
- Da sich die Coroutinen im selben Thread befinden, kann Konkurrenz vermieden werden. Zweitens eignet sich die Verwendung von Sperren
- für blockierte Szenarien, die viel Parallelität erfordern. Es eignet sich jedoch nicht für Multithreading mit großen Berechnungsmengen.
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, um- Running on top of logic auszuführen.
-
Weil 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. - Vergleich von Threads und Coroutinen
Coroutine
负责调度的线程称为Fiber
,比如Golang里的go
关键字其实就是负责开启一个Fiber
,让func
Vergleichselemente
ThreadsCoroutinen
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Effizient behandeln Probleme mit der Parallelitätssicherheit beim Schreiben von Multi-Process-Protokoll. Mehrere Prozesse schreiben gleichzeitig die gleiche Protokolldatei. Wie kann die Parallelität sicher und effizient sichergestellt werden? Das ist ein ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Automatische Löschung von Golang Generic -Funktionstypeinschränkungen in VSCODE -Benutzern kann auf ein seltsames Problem beim Schreiben von Golang -Code mit VSCODE stoßen. Wann...

Go Zeigersyntax und Probleme bei der Verwendung der Viper -Bibliothek bei der Programmierung in Go -Sprache. Es ist entscheidend, die Syntax und Verwendung von Zeigern zu verstehen, insbesondere in ...
