首页 go

coroutine 协程

当有大量IO操作时,采用协程替换线程,降低了系统内存,又减少了系统切换开销,提高了系统的性能

只有和异步IO结合才能发挥出最大的威力

package main

import (
    "fmt"
    "time"
)

func main() {
    go say("hello")
    time.Sleep(time.Second * 1)
}

func say(s string) {
    fmt.Println(s)
}

当主线程不进行睡眠时(time.Sleep(time.Second * 1)),是不会执行上面协程代码的(go 加函数或匿名函数)

package main

import (
    "fmt"
    "sync"
)

var wg = sync.WaitGroup{}

func main() {
    wg.Add(1)
    go say("hello")
    wg.Wait()
}

func say(s string) {
    fmt.Println(s)
    wg.Done()
}

使用WaitGroup可以解决这个问题,声明一个全局变量wg,.Add(1)是告诉有一个协程需要执行,.Done()是减少一个正在执行的协程,.Wait()是告诉主线程等一下,等协程都执行完再退出




文章评论