登录
首页 >  Golang >  Go教程

golang函数的goroutine

时间:2024-04-19 17:33:33 319浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《golang函数的goroutine》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

Goroutine 是 Go 中并行执行任务的轻量级执行线程,通过 go 关键字创建,具有并发性、轻量和通信能力。实战案例中,并发爬虫利用 Goroutine 并行抓取 URL,并使用信道限制并发 goroutine 数量,以优化性能和系统资源。

golang函数的goroutine

Go 函数中的 Goroutine

Goroutine 是 Go 中轻量级执行线程,可以并行执行。它们让我们能够编写并发和高效的代码。

创建 Goroutine

使用 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,使用信道 (sem) 限制最多 3 个 goroutine 同时运行。这有助于平衡性能和系统资源。

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《golang函数的goroutine》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>