最简单的想法是使用chan管道和wg也就是sync.WaitGroup这两个搭档来进行实现协程池
那么在chan管道中最简单的就是无缓冲的了
对于协程池有啥操作?
第一个要想到newPool
并且要明白,这个协程池是不是你叫他停他才能停,如果没说,就让他一直死循环做他应该做的事情
对于这个东西,我们肯定要提交任务给他这是一个submit功能函数
之后是不是还要有一个shutdown函数告诉waitgroup要停止了,结束
有这些之后,那就开始书写
package maintype Job fun()//抽象一点点,就说他是一个函数type Pool struct{//抽象出来一个池子jobChan chan Jobwg sync.WaitGroup
}
func NewPool(size int)* Pool{p:=&Pool{jobChan: make(chan Job)}P.wg.Add(size)for i:=0;i<size;i++{go func(){defer p.wg.Done()for job:=range p.jobChan{//管道只要没关闭,你一直读的话,没东西就阻塞,一直等待job()}}()}
}func (p *Pool)submit(job Job){p.jobChan<-job
}
func (p *Pool)shutdown(){close(p.jobChan)p.wg.Wait()
}