美文网首页
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