go语言多线程生产者消费者
时间: 2023-07-07 13:10:45 浏览: 65
在 Go 语言中,可以使用 goroutine 和 channel 实现生产者消费者模型。下面是一个简单的示例代码:
```go
package main
import (
"fmt"
"time"
)
func producer(ch chan<- int) {
for i := 0; i < 10; i++ {
ch <- i
fmt.Println("生产者生产:", i)
time.Sleep(time.Second)
}
close(ch)
}
func consumer(ch <-chan int) {
for v := range ch {
fmt.Println("消费者消费:", v)
time.Sleep(time.Second)
}
}
func main() {
ch := make(chan int)
go producer(ch)
go consumer(ch)
time.Sleep(10 * time.Second)
}
```
在上面的代码中,我们定义了两个函数 `producer` 和 `consumer`。`producer` 函数会不断地向通道 `ch` 中发送数据,而 `consumer` 函数会不断地从通道 `ch` 中接收数据,并进行消费。在 `main` 函数中,我们启动了两个 goroutine,分别执行 `producer` 和 `consumer` 函数。
需要注意的是,我们在 `producer` 函数中使用了 `close(ch)` 来关闭通道。这样做的目的是告诉消费者已经没有数据需要消费了。
执行上面的代码,可以看到生产者不断地向通道中发送数据,而消费者不断地从通道中接收数据,并进行消费。如果你想让程序一直运行下去,可以将 `time.Sleep(10 * time.Second)` 改为 `select {}`。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)