go常见并发模式(3):优胜劣汰模式

开启一定数量的协程,同时去执行同一个任务,只取最快执行完毕的那一个

// job
// 模拟一个耗时任务
func job() int {
    rand.Seed(time.Now().Unix())
    i := rand.Intn(5)
    time.Sleep(time.Second * time.Duration(i))
    return i
}

func main() {
    c := make(chan int)

    for i := 0; i < 5; i++ {
        go func() {
            c <- job()
        }()
    }

    fmt.Println(<-c)
}

适用于执行一些远程访问,并且远程服务不可控的任务

你可能感兴趣的:(go常见并发模式(3):优胜劣汰模式)