缓冲通道与非缓冲通道

2017-10-19  本文已影响0人  zzjack

非缓冲通道

1.先接收后发送,没有接收之前发送不能完成,会被阻塞住。
2.由于第1点,说明非缓冲通道是同步的。
3.由于第1点,说明非缓冲通道并不能使得程序性能提高。

  1. 发送端每次都需要确保元素值已被接收的情况下,使用非缓冲通道是合适的。

缓冲通道

  1. 缓冲通道就是队列。
  2. 使用缓冲通道,能够进行异步处理,提高程序性能。

goto的使用

goto用来打破for死循环

func main(){
    unbufchan := make(chan int)
    sign := make(chan byte,2)
    go func(){
        for i := 0;i<10;i++{
            select {
            case unbufchan <- i:
                case unbufchan <- i+10:
            default:
                fmt.Println("default")
            }
            time.Sleep(time.Second)
        }
        close(unbufchan)
        fmt.Println("the channel is closed")
        sign <- 0
    }()

    go func(){
        loop:
            for {
                select {
                case e,ok := <- unbufchan:
                    if !ok{
                        fmt.Println("closed channel")
                        break loop
                    }
                    fmt.Println("e=>",e)
                    time.Sleep(2*time.Second)
                }
            }
            sign <- 1
    }()
    <- sign
    <- sign
}

定时器timer.Reset的使用

if timer == nil{
  timer = time.NewTimer(time.Millisecond)
} else{
  timer.Reset(time.Millisecond)
}

拼凑时间

//3小时20分钟
3*time.Hour+20*time.Minute
上一篇 下一篇

猜你喜欢

热点阅读