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
この関数は、チャネル (sem
) を使用して URL を並行してクロールし、同時に実行するゴルーチンを最大 3 つまで制限します。これは、パフォーマンスとシステム リソースのバランスを取るのに役立ちます。
以上がgolang関数のゴルーチンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。