go 线程池

1. go 线程池

1.1. 基础款

func main() {
    const (
        numWorkers = 3  // worker 数量
        numJobs    = 10 // job 数量
    )

    jobs := make(chan int, numJobs)
    results := make(chan int, numJobs)

    // 创建 3 个工作函数。它们是同时运行的。
    for i := 1; i <= numWorkers; i++ {
        go work(i, jobs, results)
    }

    // 分派 10 个工作
    for i := 1; i <= numJobs; i++ {
        jobs <- i
    }

    close(jobs) // 关闭 channel。关闭后工作函数会退出。

    // 把结果 channel 里面的数据全部取出
    for i := 0; i < numJobs; i++ {
        <-results
    }
}
// 工作函数: 等待 job(用 chan 卡死)
func work(id int, jobs <-chan int, results chan<- int) {
    for i := range jobs {
        fmt.Printf("worker %d started job %d\n", id, i)

        time.Sleep(time.Second)

        fmt.Printf("worker %d finished job %d\n", id, i)

        results <- 2 * i
    }

    fmt.Printf("worker %d exited\n", id)
}

结果:

worker 1 started job 2
worker 2 started job 3
worker 3 started job 1
worker 2 finished job 3
worker 1 finished job 2
worker 1 started job 5
worker 2 started job 4
worker 3 finished job 1
worker 3 started job 6
worker 1 finished job 5
worker 1 started job 7
worker 2 finished job 4
worker 2 started job 8
worker 3 finished job 6
worker 3 started job 9
worker 3 finished job 9
worker 3 started job 10
worker 1 finished job 7
worker 1 exited
worker 2 finished job 8
worker 2 exited
worker 3 finished job 10
worker 3 exited
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云满笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值