goRedisDLM/scheduler/firstscheduler.go
2025-02-06 16:48:15 +08:00

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
}