美文网首页golang
golang 中channel 缓存channel 和无缓存ch

golang 中channel 缓存channel 和无缓存ch

作者: 顶尖少爷 | 来源:发表于2021-04-26 11:15 被阅读0次
    c1:=make(chan int)        无缓冲
    
    c2:=make(chan int,1)      有缓冲
    

    无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着

    而 c2<-1 则不会阻塞,因为缓冲大小是1 只有当 放第二个值的时候 第一个还没被人拿走,这时候才会阻塞。

    有缓冲

        var c=make(chan int,1)
        fmt.Println("Main going to call hello go goroutine")
         go func(c  chan int) {
             fmt.Println("hello go routine is going to sleep")
             time.Sleep(4 * time.Second)
             fmt.Println("hello go routine awake and going to write to done")
             c<-1
         }(c)
    
        <-c
        fmt.Println("Main received data")
    

    无缓存区

    package main
    
    import (  
        "fmt"
    )
    
    func producer(chnl chan int) {  
        for i := 0; i < 10; i++ {
            chnl <- i
        }
        close(chnl)
    }
    func main() {  
        ch := make(chan int)
        go producer(ch)
        for v := range ch {
            fmt.Println("Received ",v)
        }
    }
    

    相关文章

      网友评论

        本文标题:golang 中channel 缓存channel 和无缓存ch

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