57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
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
|
|
}
|