go worker pool 通过固定数量的 goroutine 消费同一个任务队列。worker 数决定同时处理的任务上限,队列容量决定最多能积压多少等待中的任务。

用三个 worker 消费同一队列
保存为 main.go。每个 worker 一次处理一项。结果通道由主协程持续读取。
package main
import (
"fmt"
"sync"
"time"
)
func main() {
jobs := make(chan int, 4)
results := make(chan int)
var workers sync.WaitGroup
for worker := 0; worker <p><img src="https://img.php.cn/upload/image/224/117/265/1794560892650171.jpg?x-oss-process=image/resize,p_40" alt=""></p><p>队列满时,提交者会等待。结果顺序取决于完成时机。</p><h2>验证完整消费结果</h2><p>运行程序并检查结果。</p><pre class="brush:php;toolbar:false;">go run main.go
# 5 55
平方和为 55,说明五项任务都返回了结果。
用竞态检测验证共享数据改动
在支持竞态检测的环境中运行。
go run -race main.go
示例由主协程独占统计变量。若后续要保留输入顺序,可让每条结果携带原始索引。










