

新闻资讯
技术学院通过 goroutine 和 channel 可以让两个耗时函数(如 f1(2) 和 f1(1))并发执行,使总耗时由 3 秒降至最长子任务耗时(2 秒),无需修改原函数签名,仅需在调用侧引入并发机制。
在 Go 中,函数默认是顺序执行的:runNotParallel() 先阻塞等待 f1(2) 完成(2 秒),再阻塞等待 f1(1)(1 秒),总计耗时 3 秒。要实现真正的并行执行,核心思路是将函数调用“卸载”到独立 goroutine 中,并通过 channel
同步收集结果。
关键点在于:
以下是优化后的 runParallel 实现:
func runParallel() {
out1 := make(chan string)
out2 := make(chan string)
go func() { out1 <- f1(2) }()
go func() { out2 <- f1(1) }()
// 主协程在此处等待两个 channel 同时就绪(实际是依次接收,但因并发已就绪)
f2(<-out1, <-out2)
}⚠️ 注意事项:
✅ 总结:Go 的并发模型强调“通过通信共享内存”,用 goroutine + channel 组合替代传统回调或 Future/Promise,简洁、安全、符合 Go 的哲学。只需三步即可改造串行调用为并行:声明 channel → 启动 goroutine 写入 → 主流程读取并消费。这是 Go 并发编程最典型、最推荐的实践模式。