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  }