如何使用 go 协程实现并行处理?创建协程并行计算斐波那契数列。协程通过 channel 传递数据,实现并行计算。主协程接收并处理并行计算的结果。
如何使用 Go 协程实现并行处理
协程简介
协程是 Go 中一种轻量级并发原语,它允许在一个 goroutine(并发执行的函数)内暂停和恢复执行,而无需启动新的线程或进程。这有助于提高并发效率并减少内存消耗。
实战案例:并行计算斐波那契数列
为了展示协程的并行处理能力,我们创建一个 Go 程序来并行计算斐波那契数列:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
go fib(20, ch) // 启动一个协程计算斐波那契数
time.Sleep(100 * time.Millisecond) // 等待协程完成
result := <-ch // 从 channel 中接收计算结果
fmt.Println("斐波那契数列的第 20 项:", result)
}
func fib(n int, ch chan int) {
if n <= 1 {
ch <- 1
return
}
ch1 := make(chan int)
ch2 := make(chan int)
go fib(n-1, ch1) // 通过协程并行计算斐波那契数列
go fib(n-2, ch2)
f1 := <-ch1
f2 := <-ch2
ch <- f1 + f2 // 并行计算的结果相加后发送到主协程
}
运行程序
运行该程序后,会在终端输出斐波那契数列的第 20 项:
斐波那契数列的第 20 项: 6765
注意事项
- 协程不需要显式释放资源。
- 过度使用协程可能会导致性能问题,因为每个协程都有自己的栈空间。
- 对于阻塞操作(如 I/O),应使用 channel 进行通信,而不是直接在协程之间传递数据。