package scheduler import ( "goRedisDLM/engine" "time" ) type FirstScheduler struct { Request chan engine.Request Worker chan chan engine.Request } func (f *FirstScheduler) Submit(request engine.Request) { f.Request <- request } func (f *FirstScheduler) ConfigChan() chan engine.Request { return make(chan engine.Request) } func (f *FirstScheduler) Run() { f.Request = make(chan engine.Request) f.Worker = make(chan chan engine.Request) go func() { var requests []engine.Request var workers []chan engine.Request for { var req engine.Request var work chan engine.Request if len(requests) > 0 && len(workers) > 0 { req = requests[0] work = workers[0] } select { case r := <-f.Request: requests = append(requests, r) case w := <-f.Worker: workers = append(workers, w) case work <- req: requests = requests[1:] workers = workers[1:] case <-time.After(time.Millisecond * 100): } } }() } func (f *FirstScheduler) WorkReady(requests chan engine.Request) { f.Worker <- requests }