缓冲通道与非缓冲通道

非缓冲通道

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,935评论 25 708
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,760评论 0 11
  • #每日教练问题# 当你孤单你会想起谁? 好像每个人都会经历孤独的时刻。 望不尽的海市蜃楼 迎面而来风的呼啸 不可逆...
    雨婷儿呀阅读 233评论 0 0
  • 目录 轮回百世,缘起缘灭。你,相信缘分吗? 他是王府中一位被囚公子――沐白。 她是修炼千年化为人形的锦鲤――绯雪。...
    迟安北阅读 759评论 0 4