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)

}

相关推荐
不好听6135 小时前
javascript中对象的简单了解
javascript
weixin199701080165 小时前
[特殊字符] 人工抓取数据革命:从“人肉爬虫”到“智能数据工厂”全面转型指南
开发语言·爬虫·python
candyTong5 小时前
Claude Code 的 Skill 动态发现机制
javascript
小KK_5 小时前
写给前端小白:我终于搞懂了JS原型和原型链
前端·javascript
HjhIron5 小时前
学习并且总结JavaScript对象
javascript
一行代码一行诗++5 小时前
goto语句
java·开发语言·算法
froginwe115 小时前
JSP 日期处理
开发语言
拾年2756 小时前
520刚过,今天来教你怎么"驾驭"别人的对象
前端·javascript
我材不敲代码6 小时前
Python 基础:列表的切片与嵌套列表使用技巧
开发语言·python