首页 > 其他 > 详细

goroutine/channel(select、定时器)

时间:2019-02-01 17:05:12      阅读:219      评论:0      收藏:0      [点我收藏+]
应用场景举例:
一个任务管道满了,再往里面塞就塞不进去了,浏览器刷不出来了。用户即便关了浏览器可能依然在阻塞......

package main

import "fmt"
import "time"

func main() {
    var ch chan int
    ch = make(chan int, 10)
    ch2 := make(chan int, 10)
    go func() {
        var i int
        for {
            ch <- i
            time.Sleep(time.Second)
            ch2 <- i * i
            time.Sleep(time.Second)
            i++
        }
    }()
    for {
        select {
        //这个case如果不能从ch中获取数据,则会立即走下一个
        case v := <-ch:
            fmt.Println(v)
            //这个case如果不能从ch2中获取数据,则会立即走下一个
        case v := <-ch2:
            fmt.Println(v)
        case <-time.After(time.Second):
            fmt.Println("get data timeout")
            time.Sleep(time.Second)
        default:
            fmt.Println("===================")
            time.Sleep(time.Second)
        }
    }
}

goroutine/channel(select、定时器)

原文:http://blog.51cto.com/5660061/2348476

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!