go实现协程池

package main

import (

"fmt"

"sync"

"sync/atomic"

"time"

)

type WorkerPool struct {

workers int

jobs chan func()

wg sync.WaitGroup

}

func NewWorkerPool(workers int) *WorkerPool {

pool := &WorkerPool{

workers: workers,

jobs: make(chan func()),

}

pool.startWorkers()

return pool

}

func (p *WorkerPool) startWorkers() {

for i := 0; i < p.workers; i++ {

go func() {

for job := range p.jobs {

job()

}

}()

}

}

func (p *WorkerPool) Do(job func()) {

p.wg.Add(1)

go func() {

defer p.wg.Done()

p.jobs <- job

}()

}

func (p *WorkerPool) Wait() {

p.wg.Wait()

close(p.jobs)

}

func main() {

pool := NewWorkerPool(10)

var count int32

for i := 0; i < 100; i++ {

pool.Do(func() {

time.Sleep(10 * time.Millisecond)

atomic.AddInt32(&count, 1)

})

}

pool.Wait()

fmt.Printf("Count is %d\n", count)

}

相关推荐
To_OC40 分钟前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
触底反弹1 小时前
🔥 前端也能玩转 AI 流式输出!从二进制流到打字机效果,一篇讲透
javascript·人工智能·node.js
胡萝卜术1 小时前
深度重构:Agent Skills——从 Prompt 工程到能力工程
javascript·架构·github
benchmark_cc2 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
程序员无隅3 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
Python+993 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
二炮手亮子4 小时前
浅记java线程池
java·开发语言
To_OC4 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
rockey6274 小时前
基于AScript的JavaScript脚本语言发布啦
javascript·c#·.net·js·script
zmzb01034 小时前
C++课后习题训练记录Day157
开发语言·c++