生产者和消费者模型的概念
生产者:一个goroutine,向通道中发送数据
消费者:一个goroutine,从通道中接收数据
生产者:一个goroutine,向通道中发送数据
消费者:一个goroutine,从通道中接收数据
可以是N个生产者对应N个消费者。
这是一个生成者对应两个消费者
package main import "fmt" func main() { /* 一条goroutine,生产数据,理解为生产者 两条goroutine,获取数据,理解为消费者 */ ch1 := make(chan int) done := make(chan bool) //生产者 go func() { for i:=0;i<100;i++{ ch1 <- i // 0 1 2 3 fmt.Println("生产者产生数据:",i) // 0 1 2 } close(ch1)//生产完毕后,关闭通道 }() //消费者1 go func() { for n:=range ch1{ fmt.Println("\t消费者range1:",n) } done <- true }() //消费者2 go func() { for n:=range ch1{ // 0 1 2 3 fmt.Println("\t消费者range2:",n) // 0 1 2 3 } done <- true }() <- done <- done fmt.Println("main。。over。。。。。") }
再来两个生产者对应一个消费者
package main import "fmt" func main() { ch1 := make(chan int) done := make(chan bool) //生产者1 go func() { for i:=0;i<100 ;i++ { fmt.Println("生产者1产生数据:", i) // 0 ch1 <- i // } done <- true }() // 生产者2 go func() { for i:=100;i<200;i++{ ch1 <- i // 100 fmt.Println("生产者2产生数据:",i)//100 } done <- true }() //消费者 go func() { for n:=range ch1{ // 100 fmt.Println("\t消费者消费数据:", n) // 0 1 } done <- true }() //main goroutine <-done <-done close(ch1) //两个生产者生产数据后,关闭通道 <-done fmt.Println("main..over....") }