Maison > Article > développement back-end > Comment limiter efficacement les routines Go simultanées ?
Limiter les routines Go simultanées
Dans votre code, vous tentez de limiter le nombre de goroutines simultanées. Cependant, la mise en œuvre actuelle ne fonctionne pas comme prévu. Voici une approche alternative :
Solution :
Au lieu de créer une goroutine pour chaque URL, créez un nombre fixe de travailleurs qui traitent les URL d'un canal partagé. Voici le code modifié :
<code class="go">parallel := flag.Int("parallel", 10, "max parallel requests allowed") flag.Parse() // Workers get URLs from this channel urls := make(chan string) // Feed the workers with URLs go func() { for _, u := range flag.Args() { urls <- u } // Workers will exit from range loop when channel is closed close(urls) }() var wg sync.WaitGroup client := rest.Client{} results := make(chan string) // Start the specified number of workers. for i := 0; i < *parallel; i++ { wg.Add(1) go func() { defer wg.Done() for url := range urls { worker(url, client, results) } }() } // When workers are done, close results so that main will exit. go func() { wg.Wait() close(results) }() for res := range results { fmt.Println(res) }</code>
Explication :
Ceci Cette approche garantit qu'un maximum de goroutines parallèles sont actives à un moment donné, limitant ainsi la concurrence comme souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!