Golang ist kein einzelner Prozess, sondern ein Multithread-Modell. Im Allgemeinen haben Go-Prozesse und Kernel-Threads eine Viele-zu-Viele-Entsprechung. Es muss Multithreading sein.
Golang ist kein einzelner Prozess, sondern ein Multithread-Prozess.
Golang verfügt über ein sogenanntes M-Ratio-N-Modell. N-go-Routinen können unter M-Threads erstellt werden. Im Allgemeinen ist N viel größer als M. Es handelt sich im Wesentlichen um ein Multi-Thread-Modell Die Planung von Coroutinen erfolgt durch Gos Laufzeitentscheidung und betont, dass Entwickler Kanäle für die Synchronisierung zwischen Coroutinen verwenden sollten.
Da die Sprachebene nicht offen ist, können Sie mehrere go routine
in einem Thread erstellen Die Anzahl der CPU-Kerne wird natürlich durch runtime
bestimmt.
In Bezug auf die Planung von goroutine
werde ich nur über das GMP-Modell sprechen, das auf M-Threads ausgeführt wird. wird überprüft. Die ausführbare Warteschlange auf P enthält ausführbare Goroutinen. Sobald auf dem aktuellen P keine ausführbare Goroutine vorhanden ist, wird die Goroutine in der ausführbaren Warteschlange eines anderen P gestohlen.
Theoretisch ist die Erstellung von Goroutinen nur durch den Speicher begrenzt. Bei einem Thread mit 2 MB Speicherplatz kann dies theoretisch problemlos 1.000 sein , also das Betriebssystem Die Anzahl der Threads erhöht sich nicht, wenn die Anzahl der erstellten Goroutinen zunimmt. Die Thread-Planung ist für Go relativ leistungsintensiv. Häufiges Wechseln der Zeitpläne erfolgt nur zwischen Goroutinen, und Threads verwalten nur die gleiche Anzahl aktiver Threads wie CPUs.
Verwandte Lernempfehlungen: Go-Sprachtutorial
Das obige ist der detaillierte Inhalt vonIst Golang ein Einzelprozess?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!