在Go语言中,虽然Goroutine的创建和销毁代价较低,但在高并发场景下,为了更好地控制资源使用、限制并发数量以及提高性能,我们通常会使用协程池(Goroutine Pool)。协程池通过预先创建一定数量的Goroutine,并复用这些Goroutine来处理任务,从而避免频繁地创建和销毁Goroutine带来的开销。
以下是一个简单的协程池实现示例,包含完整源码和详细注释。
协程池实现
1. 定义任务结构体
首先,我们定义一个表示任务的结构体,每个任务包含一个执行函数和一个完成信道,用于通知任务完成。
package main
import (
"fmt"
"sync"
"time"
)
// Job 表示一个需要执行的任务
type Job struc