github.com/zly-app/zapp@v1.3.3/component/gpool/worker.go (about) 1 package gpool 2 3 // 工人 4 type worker struct { 5 pool chan<- *worker // 工人队列池 6 jobChannel chan *job // 工作任务 7 stop chan struct{} // 停止信号 8 } 9 10 // 准备好 11 func (w *worker) Ready() { 12 go func() { 13 var job *job 14 for { 15 select { 16 case job = <-w.jobChannel: // 等待任务 17 if job != nil { 18 job.Do() 19 } 20 w.pool <- w 21 case <-w.stop: 22 w.stop <- struct{}{} 23 return 24 } 25 } 26 }() 27 } 28 29 // 做任务 30 func (w *worker) Do(job *job) { 31 w.jobChannel <- job 32 } 33 34 // 停止 35 func (w *worker) Stop() { 36 w.stop <- struct{}{} 37 <-w.stop 38 } 39 40 // 创建一个工人 41 func newWorker(pool chan<- *worker) *worker { 42 return &worker{ 43 pool: pool, 44 jobChannel: make(chan *job), 45 stop: make(chan struct{}), 46 } 47 }