帮我写一段golang 协程并发
时间: 2023-07-25 17:48:06 浏览: 94
当涉及到并发时,Golang 是一种非常强大的语言。以下是一段简单的 Golang 协程并发代码:
```go
package main
import (
"fmt"
"time"
)
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "started job", j)
time.Sleep(time.Second)
fmt.Println("worker", id, "finished job", j)
results <- j * 2
}
}
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
// 创建3个协程
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// 创建5个任务
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
// 读取结果
for a := 1; a <= 5; a++ {
<-results
}
}
```
在这段代码中,我们定义了一个 `worker` 函数,该函数用于执行任务。我们创建了一个 `jobs` 通道,将任务发送到该通道中。我们还创建了一个 `results` 通道,用于接收任务执行结果。
在 `main` 函数中,我们创建了三个协程,每个协程执行 `worker` 函数。然后我们将五个任务发送到 `jobs` 通道中,并关闭该通道,以便告诉协程它们不会再有更多的任务了。
最后,我们从 `results` 通道中读取结果,这些结果是通过 `worker` 函数计算得出的。这段代码展示了 Golang 协程并发的基本用法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![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_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)