go语言基础 生产者和消费者模型

生产者和消费者模型的概念
生产者:一个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....")
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值