Heim > Backend-Entwicklung > Golang > Erstellung und Verwaltung von Goroutinen in Golang-Funktionen

Erstellung und Verwaltung von Goroutinen in Golang-Funktionen

王林
Freigeben: 2024-06-05 19:06:01
Original
1104 Leute haben es durchsucht

Erstellen Sie in der Go-Sprache eine Goroutine mit dem Schlüsselwort go und einem Funktionsaufruf. Verwenden Sie beim Verwalten von Goroutine sync.WaitGroup für die Synchronisierung. Verwenden Sie das Kontextpaket, um Goroutine abzubrechen. Im tatsächlichen Kampf können damit Netzwerkanfragen, Bildverarbeitung und andere Aufgaben parallel verarbeitet werden.

Golang 函数中 goroutine 的创建和管理

Erstellung und Verwaltung von Goroutinen in Golang-Funktionen

Goroutine (Coroutine) ist eine leichte parallele Ausführungseinheit in der Go-Sprache, die mehrere Aufgaben gleichzeitig in einem einzigen Thread ausführen kann.

Eine Goroutine erstellen

Eine Goroutine erstellen ist sehr einfach. Sie können das Schlüsselwort go verwenden, gefolgt von einem Funktionsaufruf: go 关键字后跟一个函数调用即可:

func hello() {
    fmt.Println("Hello from goroutine")
}

func main() {
    go hello() // 创建一个执行 hello() 函数的 goroutine
}
Nach dem Login kopieren

Goroutine 管理

同步

在处理共享资源时,需要对 goroutine 进行同步。使用 sync.WaitGroup 可以等待一组 goroutine 完成:

var wg sync.WaitGroup

func hello(name string) {
    wg.Add(1)
    defer wg.Done()

    fmt.Println("Hello", name)
}

func main() {
    wg.Add(3)
    go hello("John")
    go hello("Mary")
    go hello("Bob")
    wg.Wait() // 等待所有 goroutine 完成
}
Nach dem Login kopieren

取消

可以使用 context

import (
    "context"
    "fmt"
    "time"
)

func heavyComputation(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Computation cancelled")
            return
        default:
            // 执行计算
        }
    }
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()

    go heavyComputation(ctx)
    time.Sleep(10 * time.Second) // 10 秒后取消计算
}
Nach dem Login kopieren

Goroutine-Verwaltung

Synchronisierung

Verarbeitung geteilt Ressourcen Wenn Goroutine synchronisiert werden muss. Verwenden Sie sync.WaitGroup, um auf den Abschluss einer Gruppe von Goroutinen zu warten:

func main() {
    urls := []string{"https://example.com", "https://example.net", "https://example.org"}

    var wg sync.WaitGroup

    for _, url := range urls {
        wg.Add(1)
        go func(url string) {
            resp, err := http.Get(url)
            if err != nil {
                log.Fatal(err)
            }

            resp.Body.Close()
            wg.Done()
        }(url)
    }

    wg.Wait()
}
Nach dem Login kopieren

Abbrechen

Sie können das Paket context verwenden, um Goroutinen abzubrechen:
func main() {
    images := []string{"image1.jpg", "image2.jpg", "image3.jpg"}

    var wg sync.WaitGroup

    for _, image := range images {
        wg.Add(1)
        go func(image string) {
            img, err := image.Decode(image)
            if err != nil {
                log.Fatal(err)
            }

            // 处理图像

            wg.Done()
        }(image)
    }

    wg.Wait()
}
Nach dem Login kopieren
Praxisfall

Parallele Verarbeitung von Netzwerkanfragen:

🎜rrreee🎜🎜Parallele Verarbeitung von Bildverarbeitung: 🎜🎜rrreee

Das obige ist der detaillierte Inhalt vonErstellung und Verwaltung von Goroutinen in Golang-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage