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

Go 函数中的 Goroutine
Goroutine 是 Go 中轻量级执行线程,可以并行执行。它们让我们能够编写并发和高效的代码。
创建 Goroutine
立即学习“go语言免费学习笔记(深入)”;
使用 go 关键字创建一个 Goroutine,后跟一个函数调用:
func main() {
go hello()
}
func hello() {
fmt.Println("Hello world!")
}goroutine 的好处
实战案例:并发爬虫
使用 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函数的goroutine的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号