美文网首页
golang-select调度器

golang-select调度器

作者: 爱吃豆包 | 来源:发表于2019-12-18 11:02 被阅读0次

    select 方式进行调度

    使用场景:
    比如有多个通道,但我打算是哪一个通道先给我数据,我就先执行谁
    这个select 可以是并行执行 channel管道

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    /**
        select 方式进行调度
    
            使用场景:比如有多个通道,但我打算是哪一个通道先给我数据,我就先执行谁
            这个select 可以是并行执行 channel管道
    
     */
    
    // 发送值
    func generator() chan int {
        out := make(chan int)
    
        go func() {
            i := 0
            for {
                // 随机睡眠, 1500毫秒以内
                time.Sleep(time.Duration(rand.Intn(1500)) * time.Millisecond)
    
                // 往 out  这个channel里面传输 i 这个值
                out <- i
                i++
            }
        }()
    
        return out
    }
    
    
    func main() {
    
        /**
            如果 channel (chan) 是 nil, 在 select里面也是可以使用的,只不过是堵塞状态!
         */
    
        // var c1, c2 chan int // c1 和 c2 是 nil
        var c1, c2 = generator(), generator() // 赋值
    
        // 从 channel里面接收数据
        //n1 := <- c1
        //n2 := <- c2
    
        /**
            上面两个通道有数据,是同类型的数据,但是我想谁先给我数据,我就要谁
         */
        for  {
            select {
            case n := <- c1:
                fmt.Println("从 c1 获取到数据:", n)
            case n := <- c2:
                fmt.Println("从 c2 获取到数据:", n)
            //default:
            //  fmt.Println("通道内。没有数据!")
            }
        }
    
    
    }
    
    

    相关文章

      网友评论

          本文标题:golang-select调度器

          本文链接:https://www.haomeiwen.com/subject/fwpenctx.html