美文网首页
golang简易工作池

golang简易工作池

作者: funcx | 来源:发表于2018-11-29 14:28 被阅读12次
type Pool struct {
    workerNum int
    jobQue    chan func() error
    wg        sync.WaitGroup
}

func NewPool(wn int) *Pool {
    return &Pool{workerNum: wn, jobQue: make(chan func() error)}
}

func (p *Pool) AddTask(f func() error) {
    p.jobQue <- f
}

func (p *Pool) work(workId int) {
    for f := range p.jobQue {
        xlog.Info.Println("workId:", workId)
        f()
    }
    p.wg.Done()
}

func (p *Pool) Run() {
    for i := 0; i < p.workerNum; i++ {
        go p.work(i)
        p.wg.Add(1)
    }
    p.wg.Wait()
}

func (p *Pool) colse() {
    close(p.jobQue)
}

func main() {
    pool := NewPool(5)
    go func() {
        for i := 0; i < 5; i++ {
            pool.AddTask(func() error {
                log.Println(time.Now())
                return nil
            })
            time.Sleep(time.Second)
        }
        pool.colse()
    }()
    pool.Run()
}

相关文章

  • golang简易工作池

  • golang workpool , 工作池

    gowp golang worker pool ,线程池 , 工作池 并发限制goroutine池。 限制任务执行...

  • Golang高并发工作池

    go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁,并且会无限制的开启grouti...

  • golang bolt 数据库

    最近学着做 golang 编写区块链系统,用到了 bolt 这个纯 golang 语言的简易数据库 bolt。字节...

  • 简易线程池

    来自《Java并发编程的艺术》 一个简易的线程池的实现。三个类:ThreadPool线程池接口DefaultThr...

  • 简易ip池

    附上验证代码

  • 5. go 连接池

    redis 连接池说明: 说明:通过 golang 对redis 操作,还可以通过redis 连接池,流程如下: ...

  • go 中 限制 goroutine 数量以及使用协程池

    需要使用协程池? Golang 开发需要协程池吗[https://www.zhihu.com/question/3...

  • 线程池-1

    要点: 1.线程池原理,wait/notify ? 实现一个简易的线程池,http://ifeve.com/thr...

  • Android HttpURLConnection简易框架

    1、概述 封装一个简易的HttpURLConnection简易框架,内部通过线程池来进行网络请求。同时实现了请求返...

网友评论

      本文标题:golang简易工作池

      本文链接:https://www.haomeiwen.com/subject/pbqfcqtx.html