Goroutine은 작업을 병렬로 실행하는 Go의 경량 실행 스레드이며 go 키워드를 통해 생성되며 동시성, 경량 및 통신 기능을 갖추고 있습니다. 실제 사례에서 동시 크롤러는 고루틴을 사용하여 URL을 병렬로 크롤링하고 채널을 사용하여 동시 고루틴 수를 제한하여 성능과 시스템 리소스를 최적화합니다.
Go의 고루틴 기능
고루틴은 병렬로 실행될 수 있는 Go의 경량 실행 스레드입니다. 이를 통해 동시적이고 효율적인 코드를 작성할 수 있습니다.
고루틴 만들기
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
rrreee
fetch
함수는 다음을 사용하여 URL을 병렬로 크롤링합니다. 채널( sem
)은 동시에 실행되는 고루틴을 최대 3개로 제한합니다. 이는 성능과 시스템 리소스의 균형을 맞추는 데 도움이 됩니다. 🎜위 내용은 golang 함수의 고루틴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!