Da die Go-Sprache Parallelität unterstützt, werden in Interviews häufig Fragen zur Parallelität gestellt. Wie lässt sich beispielsweise die Anzahl der Go-Parallelität steuern? Das Folgende sind zwei Beispiele, die ich persönlich zusammengestellt habe:
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() }
Die oben genannte Hauptverwendung ist die WaitGroup unter dem Synchronisierungspaket in go. Dies ist auch eine gängige Implementierungsmethode bei der Arbeit. Der entscheidende Punkt ist, die Add-Methode zu verstehen . Position, die Wait-Methode soll auf die Ausführung aller Coroutinen warten
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 } }
Das obige Beispiel verwendet den Kanal in go, wobei die Kanalblockierungsfunktion und der gepufferte Kanal verwendet werden, um die Anzahl der Parallelitäten zu steuern, wobei sc Dies ist Der Kanal kann im Beispiel nur entfernt werden, um zu verhindern, dass nach dem Beenden des Hauptprogramms nicht alle Ausgaben ausgegeben werden. Im Normalbetrieb ist das Programm blockiert und kann daher entfernt werden.
Weitere Informationen zu diesem Thema finden Sie in der Spalte mit den Go-Language-Tutorials
Das obige ist der detaillierte Inhalt vonMethoden zur Steuerung der Anzahl der Parallelität in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!