我正在尝试模拟一个程序,它需要在 N 秒内执行任务中的 X 任务并丢弃其他工作请求
当收到 on 的值时,我试图timer在无限循环中使用 with select <-timer.C,我正在继续模拟任务,其中包含切片中的所有数据,这些数据受到保护maxLimit并再次将其重置timer为初始持续时间
这是代码
type Pool struct {
// The maximum number of items allowed in pool
maxSize int
//the queue to hold the data
queue []interface{}
// time window for this pool
time time.Duration
//timer for the batch
timer *time.Timer
//channel
ch chan interface{}
}
func NewPool(maxSize int, t int32) *Pool {
p := &Pool{
maxSize: maxSize,
size: 0,
queue: make([]interface{}, maxSize),
time: time.Duration(t * int32(time.Second)),
timer: time.NewTimer(time.Duration(t) * time.Second),
ch: make(chan interface{}),
}
go p.Schedule()
return p
}
func (p *Pool) Add(ele interface{}) {
p.ch <- ele
}
func (p *Pool) Schedule() {
for {
select {
case <-p.timer.C:
fmt.Println("Time is over")
p.queue = make([]interface{}, 0)
p.timer.Reset(p.time)
p.flush()
case data := <-p.ch:
if len(p.queue) < p.maxSize {
fmt.Println("Addding")
p.queue = append(p.queue, data)
}
//p.flush()
if !p.timer.Stop() {
<-p.timer.C
}
p.queue = make([]interface{}, 0)
}
}
}
但这没有按预期工作我在这里遗漏了一些东西,你能指导我使用并发模式来满足这个要求吗,谢谢
MMMHUHU
相关分类