自学内容网 自学内容网

go多线程

1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束)

package main

import "time"

func main() {
go func() {
println("Hello, World!")
}()
time.Sleep(1 * time.Second)
}

2、wg.Add(数量)使用,这个会等待,直到全部完成

func main() {
    wg := sync.WaitGroup{}

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go calc(&wg, i)
    }

    wg.Wait()
    fmt.Println("all goroutine finish")
}
func calc(w *sync.WaitGroup, i int) {

    fmt.Println("calc:", i)
    time.Sleep(time.Second)
    w.Done()
}
传值localI := i,不能直接使用i,会重复,因为你在下次使用可能i已改变
var wg sync.WaitGroup
numGoroutines := 100
wg.Add(numGoroutines) //100个
for i := 0; i < numGoroutines; i++ {
localI := i
go func() {
fmt.Println("Value:", localI)
fmt.Println("大得")
wg.Done() //减1,直到全部减完,结束
}()
}
wg.Wait()
fmt.Println("执行完了")

在这里插入图片描述


原文地址:https://blog.csdn.net/qq_34631220/article/details/142301622

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!