11.6 并发模式(上)
一、并发模式
生成器
服务/任务
同时等待多个服务:两种方法
package main
import (
"fmt"
"math/rand"
"time"
)
func msgGen(name string) chan string {
c := make(chan string)
go func() {
i := 0
for {
time.Sleep(time.Duration(rand.Intn(2000)) * time.Millisecond)
c <- fmt.Sprintf("server %s: message %d", name, i)
i++
}
}()
return c
}
// 同时等待多个服务
func fanIn(c1, c2 chan string) chan string {
c := make(chan string)
go func() {
for {
c <- <-c1
}
}()
go func() {
for {
c <- <-c2
}
}()
return c
}
func main() {
m1 := msgGen("m1")
m2 := msgGen("m2")
m := fanIn(m1, m2)
for {
fmt.Println(<-m)
}
}Last updated
Was this helpful?