Maison  >  Article  >  développement back-end  >  goroutine de la fonction golang

goroutine de la fonction golang

王林
王林original
2024-04-19 17:39:02818parcourir

Goroutine est un thread d'exécution léger dans Go qui exécute des tâches en parallèle. Il est créé via le mot-clé go et possède des capacités de concurrence, de légèreté et de communication. Dans des cas pratiques, les robots d'exploration simultanés utilisent des Goroutines pour explorer les URL en parallèle et utilisent des canaux pour limiter le nombre de Goroutines simultanées afin d'optimiser les performances et les ressources système.

goroutine de la fonction golang

Fonction Goroutine en Go

Goroutine est un thread d'exécution léger en Go et peut être exécuté en parallèle. Ils nous permettent d'écrire du code concurrent et efficace.

Créer une Goroutine

Créez une Goroutine en utilisant le mot-clé go, suivi d'un appel de fonction : 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

🎜Avantages de la goroutine🎜🎜
  • 🎜Concurrence : 🎜 Goroutine peut effectuer plusieurs tâches simultanément pour améliorer les performances.
  • 🎜Léger : 🎜 Goroutine est beaucoup plus léger que les threads et a des frais généraux inférieurs.
  • 🎜Communication : 🎜 Les Goroutines peuvent communiquer facilement via des canaux.
🎜🎜Cas pratique : Crawler concurrent🎜🎜🎜Utilisez Goroutine pour créer un crawler concurrent : 🎜rrreee🎜Dans cet exemple, la fonction fetch explore les URL en parallèle, en utilisant le le canal ( sem) limite jusqu'à 3 goroutines à exécuter simultanément. Cela permet d’équilibrer les performances et les ressources système. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn