1.
在使用java开发时,遇到生产者与消费者模型,最常使用的方式便是加锁,给共享资源加锁解决。当有多个消费者或生产者时,通过condition让进行唤醒对方。
2.
在go语言中,通过channel的方式可以很方便的解决此问题。符合“不要用共享的方式来通信,而是用通信的方式来解决共享”的思想。
//生产者
func produce(ch chan<- int) {
for {
time.Sleep(time.Millisecond * 1500)
ranNum := rand.Intn(10)
fmt.Println("produce end:",ranNum)
ch <- ranNum
}
}
//消费者
func consume(ch <-chan int) {
for n := range ch{
fmt.Println("consumer:",n)
time.Sleep(time.Second)
}
}
//生产者和消费者模型
func main() {
ch := make(chan int)
//三个生产者
for i := 0; i < 3; i++ {
go produce(ch)
}
//两个消费者
for i := 0; i < 2; i++ {
go consume(ch)
}
select{}
}