Heim >Backend-Entwicklung >Golang >Wie verwaltet der Go-Scheduler die Erstellung von M und P bei blockierenden Vorgängen?
M- und P-Erstellung im Go-Scheduler verstehen
Der Go-Scheduler basiert auf einem Modell, das Goroutinen, Betriebssystem-Threads (M) und Kontexte umfasst /Prozessoren (P). Um die Leistung zu optimieren, verwaltet der Scheduler die Erstellung und Nutzung von M und P dynamisch.
Erstellung von M
M wird erstellt, wenn der Scheduler erkennt, dass eine Blockierung ausgeführt werden muss Aufgaben. In Ihrem Beispielcode führen die Goroutinen blockierende Datenbankoperationen aus, die die Erstellung zusätzlicher M auslösen. Die genaue Anzahl der erstellten M hängt von der Anzahl der blockierten Goroutinen und den verfügbaren Systemressourcen ab.
Erstellung von P
P wird erstellt, wenn eine neue Goroutine gestartet wird. Allerdings erstellt der Scheduler nicht für jede Goroutine ein neues P. Stattdessen werden vorhandene P-Instanzen wiederverwendet und eine feste Anzahl von P beibehalten, die dem Wert von GOMAXPROCS entspricht und normalerweise auf die Anzahl der verfügbaren CPUs festgelegt ist.
In Ihrem Beispielcode
In Ihrem Testcode erstellen Sie 50 Goroutinen in zwei Stapeln. Da die Datenbankoperationen blockierend sind, wird M nach Bedarf erstellt, um die blockierenden Goroutinen zu verarbeiten. Da P-Instanzen jedoch wiederverwendet werden, werden nur 8 P erstellt, was der Anzahl der virtuellen Kerne auf Ihrem System entspricht.
Weitere Ressourcen
Zur weiteren Erkundung dieses Themas Weitere Informationen zum Thema finden Sie in diesen Ressourcen:
Das obige ist der detaillierte Inhalt vonWie verwaltet der Go-Scheduler die Erstellung von M und P bei blockierenden Vorgängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!