Étant donné que le langage go prend en charge la simultanéité, des questions sur la simultanéité sont souvent posées lors des entretiens. Par exemple, quels sont les moyens de contrôler le nombre de simultanéités go ? Voici deux exemples que j'ai personnellement compilés :
func waitGroup() { count := 10 wg := sync.WaitGroup{} for i := 0; i < count; i++ { wg.Add(1) go func(j int) { fmt.Print(j) wg.Done() // 也可使用 wg.Add(-1) }(i) } wg.Wait() }
L'utilisation principale ci-dessus est le waitGroup sous le package sync dans go. C'est également une méthode d'implémentation courante au travail. Le point clé est de comprendre la méthode Add. .Position, la méthode Wait consiste à attendre que toutes les coroutines soient exécutées
func channel() { count := 10 // 最大支持并发 sum := 100 // 任务总数 c := make(chan struct{}, count) // 控制任务并发的chan sc := make(chan struct{}, sum) // 控制任务总数的chan defer close(c) defer close(sc) for i:=0; i<sum;i++{ c <- struct{}{} // 作用类似于waitgroup.Add(1) go func(j int) { fmt.Println(j) <- c // 执行完毕,释放资源 sc <- struct {}{} // 记录到执行总数里 }(i) } for i:=sum; i>0;i-- { <- sc } }
L'exemple ci-dessus utilise le canal en go, en utilisant la fonction de blocage de canal et le canal tamponné pour contrôler le nombre de simultanéités, où sc Ceci Le canal peut être supprimé. Dans l'exemple, il est utilisé uniquement pour empêcher que toutes les sorties ne soient pas émises après la sortie du programme principal. En fonctionnement normal, le programme est généralement bloquant, il peut donc être supprimé.
Pour plus de connaissances connexes, veuillez faire attention à la colonne du didacticiel du langage go
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!