Unterscheidung von Goroutinen, Benutzer-Threads und Kernel-Threads
Einführung
Die Konzepte von Goroutinen , Benutzer-Threads und Kernel-Threads können verwirrend sein, wenn man die Feinheiten von Gos erforscht Parallelitätsmodell. Ziel dieses Artikels ist es, diese Konzepte zu klären und verwandte Fragen zu beantworten.
Frage 1: Betriebssystem-Threads und Goroutinen definieren
Frage:
- In der Einführung zu „Effective Go“ werden Goroutinen erwähnt. Worauf bezieht sich „OS-Threads“? Handelt es sich um Benutzer- oder Kernel-Threads?
Antwort:
- „Betriebssystem-Threads“ bezieht sich auf Kernel-Threads.
Frage 2: P und G im Go verstehen Scheduler
Frage:
- Warum ist die Anzahl der P (Prozessor-/Scheduling-Kontexte) gleich der Anzahl der CPU-Kerne?
- Was passiert mit anderen Programmen im Betriebssystem, die CPU benötigen, wenn alle CPUs Go-Programme bedienen? Zuordnung?
Antwort:
- P dient als Zuordnungsschicht zwischen Goroutinen und Kernel-Threads. Es gibt ein P pro Kernel-Thread.
- Go-Programme können standardmäßig alle verfügbaren CPU-Kerne zuweisen (GOMAXPROCS), dies verhindert jedoch nicht die Ausführung anderer Betriebssystemprozesse. Selbst bei gleichzeitigen Vorgängen verbringen Prozesse viel Zeit damit, auf E/A-Vorgänge zu warten, sodass der Kernel-Scheduler CPU-Zeit anderen Programmen zuweisen kann.
Frage 3: Anzahl der generierten Kernel-Threads
Frage:
- Wie viele Kernel Threads werden vom Betriebssystem generiert?
Antwort:
- Die Anzahl der vom Betriebssystem erstellten Kernel-Threads ist dynamisch und hängt vom System ab laden.
Das obige ist der detaillierte Inhalt vonGoroutinen, Benutzer-Threads und Kernel-Threads: Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!