美文网首页
go常见并发模式(1):基本模式

go常见并发模式(1):基本模式

作者: 快感炮神 | 来源:发表于2020-09-19 14:00 被阅读0次
  1. 最基本模式:go+sync
    如下使用go+sync.WaitGroup并发执行让0-9每位数字加一
var wg sync.WaitGroup

func main() {
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(index int) {
            defer wg.Done()
            fmt.Println(index + 1)
        }(i)
    }
    wg.Wait()
}
  1. 最基本模式:go+channel
    go社区有句经典的话叫做“不要通过共享内存来通信,要通过通信来共享内存”,所以我们把上面的函数改成管道的方式
func main() {
    c := make(chan int, 10)

    for i := 0; i < 10; i++ {
        go func(index int) {
            c <- index + 1
        }(i)
    }

    go close(c)

    for item := range c {
        fmt.Println(item)
    }
}

但这时候你可能会发现一个问题,方式1的打印结果每次都是乱序的,但方式2每次打印结果都是顺序的。这时候始终都要记住协程不能保证顺序。如果是顺序出来的, 可能是执行太快了,或者过程太简单,go也就调了一个 协程来执行。我们将方式2加一点时延再来看看结果

func main() {
    c := make(chan int, 10)

    for i := 0; i < 10; i++ {
        go func(index int) {
            time.Sleep(time.Millisecond * 500)
            c <- index + 1
        }(i)
    }

    go func() {
        time.Sleep(time.Second * 2)
        close(c)
    }()

    for item := range c {
        fmt.Println(item)
    }
}

此时你会看到,输出又是乱序的

相关文章

  • go常见并发模式(1):基本模式

    最基本模式:go+sync如下使用go+sync.WaitGroup并发执行让0-9每位数字加一 最基本模式:go...

  • Golang 常见的并发模式

    常见的并发模式 Go语言最吸引人的地方是它内建的并发支持。Go语言并发体系的理论是C.A.R Hoare在1978...

  • 【4】并发主流实现模型

    并发包含以下几种主流的实现模型: ❏ 多进程。多进程是在操作系统层面进行并发的基本模式。同时也是开销最大的模式。在...

  • vim入门

    一、vim模式 vim具有6种基本模式和5种派生模式,这里简单介绍下6种基本模式:1.普通模式(Normal mo...

  • vim基本操作命令

    下基本模式就是指vim的正常模式 :!基本模式 vim内执行外部命令,之后敲回车返回:w filename基本模式...

  • Go 并发模式

    1. 共享内存 2. 互斥锁 3. 无缓冲channel 4. 带缓冲channel 5. sync.WaitGroup

  • go常见并发模式(2):生产者模式

    方式1 方式2 方式2将消费者和生产者都改为协程执行,然后通过一个开关来阻塞主程,当消费者执行完成后塞入一个空结构...

  • Go并发模式(1):基础与并发调度

    笔记内容来源于Google Go团队的两个Talk: Go Concurrency Patterns (YouTu...

  • Go 并发常见讨论

    Go 并发常见讨论 并发 chan Done 控制结束 在service开发的过程中,会有多个异步的线程同时运行,...

  • go常见并发模式(3):优胜劣汰模式

    开启一定数量的协程,同时去执行同一个任务,只取最快执行完毕的那一个 适用于执行一些远程访问,并且远程服务不可控的任务

网友评论

      本文标题:go常见并发模式(1):基本模式

      本文链接:https://www.haomeiwen.com/subject/eppeyktx.html