GO worker pool

背景

在实际工作中,我们总会限制goroutine数量——worker pool模式,控制goroutine数量,避免goroutine泄露与膨胀

示例

复制代码
package main

import (
    "fmt"
    "time"
)

func worker(w int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        fmt.Printf("Start task:%d, job:%d\n", w, j)
        time.Sleep(time.Second)
        results <- w * 2
        fmt.Printf("End task:%d, job:%d\n", w, j)
    }
}

func main() {
    jobs := make(chan int, 100)
    results := make(chan int, 100)

    // 开启3个goroutine
    for w := 0; w < 3; w++ {
        go worker(w, jobs, results)
    }

    // 跑5个任务
    for j := 0; j < 5; j++ {
        jobs <- j
    }
    close(jobs)
    
    //输出结果
    for a := 0; a < 5; a++ {
        tmp := <-results
        fmt.Println(tmp)
    }
}
复制代码

执行

2
0
4
End task:0, job:1
End task:2, job:0
Start task:2, job:4
End task:2, job:4
End task:1, job:3
4
2

posted @   jihite  阅读(164)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示