Goroutine in der Go-Sprache kann auf folgende Weise verwaltet werden: 1. Goroutine erstellen: Verwenden Sie das Schlüsselwort „go“. 2. Warten Sie, bis die Goroutine beendet wird: Verwenden Sie WaitGroup. 3. Goroutine abbrechen: Verwenden Sie context.Context und context.WithCancel. In Bezug auf die Planung verwendet Go einen präventiven Planungsalgorithmus, die Funktion runtime.Gosched() kann jedoch verwendet werden, um eine kooperative Planung auszulösen.
Goroutine ist eine leichte Einheit zur gleichzeitigen Ausführung in der Go-Sprache, die einer Coroutine ähnelt. Um Goroutinen effektiv zu verwalten und zu planen und dadurch die Leistung und Stabilität gleichzeitiger Programme zu verbessern, bietet die Go-Sprache eine umfangreiche API.
Goroutine erstellen: Verwenden Sie das Schlüsselwort go
, um Goroutine zu erstellen, wie unten gezeigt: go
关键字创建 goroutine,如下所示:
go func() { // Goroutine 代码 }
等待 goroutine 退出:使用 WaitGroup
类型等待所有 goroutine 退出,如下所示:
var wg sync.WaitGroup wg.Add(numOfWorkers) for i := 0; i < numOfWorkers; i++ { go func(i int) { // Goroutine 代码 wg.Done() }(i) } wg.Wait()
取消 goroutine:使用 context.Context
和 context.WithCancel
函数取消 goroutine 的执行,如下所示:
ctx, cancel := context.WithCancel(context.Background()) go func() { // Goroutine 代码 select { case <-ctx.Done(): return } } // 取消 goroutine cancel()
Go 语言中内置的调度器负责管理和调度 goroutine。它通过以下算法来决定何时启动 goroutine:
默认情况下,Go 语言使用抢占式调度算法,但对于某些场景,协作式调度更加合适。可以使用 runtime.Gosched()
package main import "fmt" import "sync" func main() { // 创建 goroutine 池 pool := make(chan func()) // 启动 goroutine 池中的 worker for i := 0; i < 10; i++ { go func() { for { // 从池中获取任务 task := <-pool // 执行任务 task() } }() } // 发送任务到池中 for i := 0; i < 100; i++ { pool <- func() { fmt.Println("Task", i) } } // 等待任务完成 var wg sync.WaitGroup wg.Add(100) for i := 0; i < 100; i++ { go func() { defer wg.Done() <-pool }() } wg.Wait() // 关闭池 close(pool) }
Verwenden WaitGroup
wartet darauf, dass alle Goroutinen beendet werden, wie unten gezeigt:
context.Context
und context.WithCancel
Die Funktion bricht die Ausführung der Goroutine ab, wie unten gezeigt: 🎜rrreee🎜Goroutine Scheduling🎜🎜Der in die Go-Sprache integrierte Scheduler ist für die Verwaltung und Planung von Goroutinen verantwortlich. Es verwendet den folgenden Algorithmus, um zu entscheiden, wann eine Goroutine gestartet werden soll: 🎜🎜🎜🎜Präventive Planung: 🎜Der Planer kann eine laufende Goroutine unterbrechen und zur Ausführung zu einer anderen Goroutine wechseln. 🎜🎜Gemeinsame Planung: 🎜goroutine gibt die Kontrolle aktiv ab und übergibt sie an den Planer, um andere Goroutinen zu planen. 🎜Standardmäßig verwendet die Go-Sprache einen präventiven Planungsalgorithmus, für einige Szenarien ist jedoch eine kollaborative Planung besser geeignet. Die kooperative Planung kann mit der Funktion runtime.Gosched()
ausgelöst werden. 🎜🎜Praktischer Fall🎜🎜Das Folgende ist ein Beispiel für die Verwendung von Goroutine zur gleichzeitigen Verarbeitung von Aufgaben: 🎜rrreeeDas obige ist der detaillierte Inhalt vonVerwaltung und Planung von Goroutinen in der gleichzeitigen Go-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!