Heim  >  Artikel  >  Backend-Entwicklung  >  Goroutine der Golang-Funktion

Goroutine der Golang-Funktion

王林
王林Original
2024-04-19 17:39:02818Durchsuche

Goroutine ist ein leichtgewichtiger Ausführungsthread in Go, der Aufgaben parallel ausführt. Er wird über das Schlüsselwort go erstellt und verfügt über Parallelitäts-, Leichtgewichtigkeits- und Kommunikationsfunktionen. In der Praxis verwenden gleichzeitige Crawler Goroutinen, um URLs parallel zu crawlen, und verwenden Kanäle, um die Anzahl gleichzeitiger Goroutinen zu begrenzen, um Leistung und Systemressourcen zu optimieren.

Goroutine der Golang-Funktion

Goroutine in Go-Funktion

Goroutine ist ein leichter Ausführungsthread in Go und kann parallel ausgeführt werden. Sie ermöglichen es uns, gleichzeitigen und effizienten Code zu schreiben.

Erstellen Sie eine Goroutine

Erstellen Sie eine Goroutine mit dem Schlüsselwort go, gefolgt von einem Funktionsaufruf: go 关键字创建一个 Goroutine,后跟一个函数调用:

func main() {
    go hello()
}

func hello() {
    fmt.Println("Hello world!")
}

goroutine 的好处

  • 并发性: Goroutine 可以同时执行多个任务,从而提高性能。
  • 轻量: Goroutine 比线程轻得多,开销更低。
  • 通信: Goroutine 可以通过通道(channels)轻松地通信。

实战案例:并发爬虫

使用 Goroutine 创建一个并发爬虫:

package main

import (
    "fmt"
    "sync"
    "time"
)

// URL 队列
var urls = []string{"url1", "url2", "url3"}

// 用于确保并发安全
var wg sync.WaitGroup

// 抓取函数
func fetch(url string) {
    // 模拟抓取
    fmt.Println("抓取", url)
    time.Sleep(100 * time.Millisecond)
    wg.Done()
}

func main() {
    // 限制并发 goroutine 的数量
    maxConcurrency := 3

    // 创建一个信道来限制并发 goroutine 的数量
    sem := make(chan struct{}, maxConcurrency)

    // 为每个 URL 创建一个 goroutine
    for _, url := range urls {
        sem <- struct{}{}
        wg.Add(1)
        go func(url string) {
            defer wg.Done()
            defer func() { <-sem }()

            fetch(url)
        }(url)
    }

    // 等待所有 goroutine 完成
    wg.Wait()
}

在这个示例中,fetch 函数并行抓取 URL,使用信道 (semrrreee

🎜Vorteile von Goroutine🎜🎜
  • 🎜Parallelität: 🎜 Goroutine kann mehrere Aufgaben gleichzeitig ausführen, um die Leistung zu verbessern.
  • 🎜Leicht: 🎜 Goroutine ist viel leichter als Threads und hat einen geringeren Overhead.
  • 🎜Kommunikation: 🎜 Goroutinen können einfach über Kanäle kommunizieren.
🎜🎜Praktischer Fall: Gleichzeitiger Crawler🎜🎜🎜Verwenden Sie Goroutine, um einen gleichzeitigen Crawler zu erstellen: 🎜rrreee🎜In diesem Beispiel crawlt die Funktion fetch URLs parallel unter Verwendung von Kanal ( sem) begrenzt die gleichzeitige Ausführung von bis zu 3 Goroutinen. Dies trägt dazu bei, Leistung und Systemressourcen auszugleichen. 🎜

Das obige ist der detaillierte Inhalt vonGoroutine der Golang-Funktion. 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