golang

golang 中channel 缓存channel 和无缓存ch

2021-04-26  本文已影响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)
    }
}
上一篇下一篇

猜你喜欢

热点阅读