Goroutine 是 Go 中并行执行任务的轻量级执行线程,通过 go 关键字创建,具有并发性、轻量和通信能力。实战案例中,并发爬虫利用 Goroutine 并行抓取 URL,并使用信道限制并发 goroutine 数量,以优化性能和系统资源。
Go 函数中的 Goroutine
Goroutine 是 Go 中轻量级执行线程,可以并行执行。它们让我们能够编写并发和高效的代码。
创建 Goroutine
使用 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中文网其他相关文章!