gitee.com/h79/goutils@v1.22.10/common/scheduler/pool_worker.go (about) 1 package scheduler 2 3 import ( 4 "gitee.com/h79/goutils/common/system" 5 ) 6 7 type jobWorker struct { 8 running system.RunningCheck 9 pool *Pool 10 job chan *Job 11 stop chan int 12 } 13 14 func (w *jobWorker) start() { 15 w.running.GoRunning(w.run) 16 } 17 18 func (w *jobWorker) run() { 19 w.pool.workerRunning() 20 defer w.pool.workerQuit() 21 for { 22 w.pool.idleWork(w) //把idle work放进去 23 select { 24 case job := <-w.job: 25 _, _ = job.Execute() 26 w.pool.workerIdle() 27 case s := <-w.stop: 28 w.stopJob(s) 29 w.stop <- 1 30 return 31 } 32 } 33 } 34 35 func newWorker(pool *Pool) *jobWorker { 36 return &jobWorker{ 37 pool: pool, 38 job: make(chan *Job), 39 stop: make(chan int), 40 } 41 } 42 43 func (w *jobWorker) stopJob(s int) { 44 var opts = With(s) 45 for i := 0; i < len(w.job); i++ { 46 job, ok := <-w.job 47 if !ok { 48 return 49 } 50 _, _ = job.Execute(opts...) 51 } 52 }