码迷,mamicode.com
首页 > 其他好文 > 详细

goroutine/channel(select、定时器)

时间:2019-02-01 17:15:58      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:cond   任务   应用   data   往里面   用户   pre   ack   efault   

应用场景举例:
一个任务管道满了,再往里面塞就塞不进去了,浏览器刷不出来了。用户即便关了浏览器可能依然在阻塞......

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、定时器)

标签:cond   任务   应用   data   往里面   用户   pre   ack   efault   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!