Documentation ¶
Overview ¶
workerPool实现百万级的并发 go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁 并且会无限制的开启groutine,groutine数量激增的情况下并发性能会明显下降 所以需要考虑使用工作池来控制协程数量,以达到高并发的效果.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Worker ¶
type Worker struct {
JobQueue chan Job
}
-----------worker--------- 每一个被初始化的worker都会在后期单独占用一个协程 初始化的时候会先把自己的JobQueue传递到Worker通道中, 然后阻塞读取自己的JobQueue,读到一个Job就执行Job对象的Do()方法。
type WorkerPool ¶
type WorkerPool struct { JobQueue chan Job //WorkerPool的Job通道 // contains filtered or unexported fields }
-------------------工作池(WorkerPool)------------ 初始化时会按照传入的num,启动num个后台协程,然后循环读取Job通道里面的数据, 读到一个数据时,再获取一个可用的Worker,并将Job对象传递到该Worker的chan通道 工作池原理: 1. 整个过程中 每个Worker都会被运行在一个协程中,在整个WorkerPool中就会有num可空闲的Worker 2. 当来一条数据的时候,就会在工作池中去一个空闲的Worker去执行该Job,当工作池中没有可用的worker时 就会阻塞等待一个空闲的worker。
func NewWorkerPool ¶
func NewWorkerPool(workerLen int) *WorkerPool
func (*WorkerPool) Run ¶
func (wp *WorkerPool) Run()
Click to show internal directories.
Click to hide internal directories.