Rumah  >  Artikel  >  pembangunan bahagian belakang  >  goroutine fungsi golang

goroutine fungsi golang

王林
王林asal
2024-04-19 17:39:02797semak imbas

Goroutine ialah utas pelaksanaan ringan dalam Go yang melaksanakan tugas secara selari Ia dicipta melalui kata kunci go dan mempunyai keupayaan serentak, ringan dan komunikasi. Dalam kes praktikal, perangkak serentak menggunakan Goroutines untuk merangkak URL secara selari dan menggunakan saluran untuk mengehadkan bilangan Goroutines serentak untuk mengoptimumkan prestasi dan sumber sistem.

goroutine fungsi golang

Fungsi Goroutine dalam Go

Goroutine ialah utas pelaksanaan ringan dalam Go dan boleh dilaksanakan secara selari. Mereka membenarkan kami menulis kod serentak dan cekap.

Buat Goroutine

Buat Goroutine menggunakan kata kunci go, diikuti dengan panggilan fungsi: 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

🎜Faedah goroutine🎜currency🎜
  • 🎜 boleh Melaksanakan pelbagai tugas serentak untuk meningkatkan prestasi.
  • 🎜Ringan: 🎜 Goroutine jauh lebih ringan daripada benang dan mempunyai overhed yang lebih rendah.
  • 🎜Komunikasi: 🎜 Goroutines boleh berkomunikasi dengan mudah melalui saluran.
🎜🎜Kes praktikal: Perangkak serentak🎜🎜🎜Gunakan Goroutine untuk mencipta perangkak serentak: 🎜rrreee🎜Dalam contoh ini, fungsi fetch merangkak URL secara selari, menggunakan saluran ( sem) mengehadkan sehingga 3 gorout untuk dijalankan serentak. Ini membantu mengimbangi prestasi dan sumber sistem. 🎜

Atas ialah kandungan terperinci goroutine fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn