golang代码 最快回应

 

    func source(c chan<- int32) {
        ra, rb := rand.Int31(), rand.Intn(3) + 1
        time.Sleep(time.Duration(rb) * time.Second)    // 睡眠1~3秒
        c <- ra
    }

    func main() {
        rand.Seed(time.Now().UnixNano())
        c := make(chan int32, 5) // 必须用一个缓冲通道
        for i := 0; i < cap(c); i++ {    // 通道容量和goroutine一样多
            go source(c)
        }
        rnd := <- c // 只有第一个回应被使用了
        fmt.Println(rnd)
    }

    --------------------------------------------------------------------------------

    func source(c chan<- int32) {
        ra, rb := rand.Int31(), rand.Intn(3)+1
        time.Sleep(time.Duration(rb) * time.Second)
        select {
        case c <- ra:
        default:            // 非阻塞
        }
    }

    func main() {
        rand.Seed(time.Now().UnixNano())

        c := make(chan int32, 1) // 通道容量比goroutine数量少
        for i := 0; i < 5; i++ {
            go source(c)
        }
        rnd := <-c
        fmt.Println(rnd)
    }

 

posted @ 2020-05-27 20:32  是的哟  阅读(149)  评论(0编辑  收藏  举报