0
点赞
收藏
分享

微信扫一扫

golang协程池创建

创建golang协程池

Golang协程池(goroutine pool)是一种并发编程的技术,它可以在预先创建一定数量的协程(goroutine)后,通过将任务分配给这些协程来提高程序的并发性能和效率。下面是一个简单的Golang协程池实现示例:

package main

import (
    "fmt"
    "sync"
)

type Job func()

type Pool struct {
    jobs chan Job
    wg   sync.WaitGroup
}

func NewPool(numWorkers int) *Pool {
    p := Pool{
        jobs: make(chan Job),
    }

    p.wg.Add(numWorkers)
    for i := 0; i < numWorkers; i++ {
        go func() {
            defer p.wg.Done()
            for job := range p.jobs {
                job()
            }
        }()
    }

    return &p
}

func (p *Pool) AddJob(job Job) {
    p.jobs <- job
}

func (p *Pool) Wait() {
    close(p.jobs)
    p.wg.Wait()
}

func main() {
    pool := NewPool(4)
    for i := 0; i < 10; i++ {
        job := func() {
            fmt.Printf("Executing job %d\n", i)
        }
        pool.AddJob(job)
    }
    pool.Wait()
    fmt.Println("All jobs done")
}

在上面的示例代码中,Pool结构体表示协程池,其中jobs通道用于接收任务,wg变量用于等待所有工作协程的完成。NewPool函数用于创建协程池,其参数numWorkers表示要创建的工作协程的数量。在NewPool函数中,我们使用for循环创建numWorkers个工作协程,并将它们的处理函数放在一个goroutine中运行。在这些工作协程的处理函数中,它们会不断地从jobs通道中接收任务,并执行任务函数。AddJob方法用于向协程池中添加任务,而Wait方法则用于等待所有任务完成。在main函数中,我们创建一个协程池,并向其中添加10个任务,然后调用Wait方法等待任务完成。

举报

相关推荐

0 条评论