Heim >Backend-Entwicklung >Golang >Wie verwaltet der Go-Scheduler die Erstellung von M und P bei blockierenden Vorgängen?

Wie verwaltet der Go-Scheduler die Erstellung von M und P bei blockierenden Vorgängen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 05:20:02577Durchsuche

How does the Go scheduler manage the creation of M and P in the presence of blocking operations?

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:

  • [Go Goroutine, OS Thread und CPU Management](https://www.programming-books.net/2019/07/understand-go-scheduler- goroutine.html)
  • [Das Go GMP (Goroutine-M-P)-Modell verstehen](https://blog.container-solutions.com/understanding-go-gmp-goroutine-m-p-model)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn