11.6 并发模式(上)

一、并发模式

  1. 生成器

  2. 服务/任务

  3. 同时等待多个服务:两种方法

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?