go 的workpool 线程池
package main
import (
"fmt"
"math/rand"
)
type Job struct {
Number int
Id int
}
type Result struct {
job *Job
sum int
}
func calc(job *Job, result chan *Result) {
var sum int
number := job.Number
for number != 0 {
tmp := number % 10
sum += tmp
number /= 10
}
r := &Result{
job: job,
sum: sum,
}
result <- r
}
func Worker(jobChan chan *Job, resultChan chan *Result) {
for job := range jobChan {
calc(job, resultChan)
}
}
func startWorkerPool(num int, jobChan chan *Job, resultChan chan *Result) {
for i := 0; i < num; i++ {
go Worker(jobChan, resultChan)
}
}
func printResult(resultChan chan *Result) {
for result := range resultChan {
fmt.Printf("job id:%v number:%v result:%d\n", result.job.Id, result.job.Number, result.sum)
}
}
func main() {
jobChan := make(chan *Job, 1000)
resultChan := make(chan *Result, 1000)
startWorkerPool(128, jobChan, resultChan)
go printResult(resultChan)
var id int
for {
id++
number := rand.Int()
job := &Job{
Id: id,
Number: number,
}
jobChan <- job
}
}
写入自己的博客中才能记得长久
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!