内容压缩增加繁忙(busy)检测

This commit is contained in:
GoEdgeLab
2024-04-17 08:36:14 +08:00
parent 1e24eceee9
commit e7b70dd9b3
7 changed files with 58 additions and 28 deletions

View File

@@ -3,40 +3,58 @@
package compressions
import (
teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
"github.com/TeaOSLab/EdgeNode/internal/goman"
"io"
"time"
)
const maxWriterHits = 1 << 20
var isBusy = false
func init() {
if !teaconst.IsMain {
return
}
goman.New(func() {
var ticker = time.NewTicker(100 * time.Millisecond)
for range ticker.C {
if isBusy {
isBusy = false
}
}
})
}
func IsBusy() bool {
return isBusy
}
type WriterPool struct {
m map[int]chan Writer // level => chan Writer
c chan Writer // level => chan Writer
newFunc func(writer io.Writer, level int) (Writer, error)
}
func NewWriterPool(maxSize int, maxLevel int, newFunc func(writer io.Writer, level int) (Writer, error)) *WriterPool {
func NewWriterPool(maxSize int, newFunc func(writer io.Writer, level int) (Writer, error)) *WriterPool {
if maxSize <= 0 {
maxSize = 1024
}
var m = map[int]chan Writer{}
for i := 0; i <= maxLevel; i++ {
m[i] = make(chan Writer, maxSize)
}
return &WriterPool{
m: m,
c: make(chan Writer, maxSize),
newFunc: newFunc,
}
}
func (this *WriterPool) Get(parentWriter io.Writer, level int) (Writer, error) {
c, ok := this.m[level]
if !ok {
c = this.m[0]
if isBusy {
return nil, ErrIsBusy
}
select {
case writer := <-c:
case writer := <-this.c:
writer.Reset(parentWriter)
writer.ResetFinish()
return writer, nil
@@ -56,13 +74,9 @@ func (this *WriterPool) Put(writer Writer) {
return
}
var level = writer.Level()
c, ok := this.m[level]
if !ok {
c = this.m[0]
}
select {
case c <- writer:
case this.c <- writer:
default:
isBusy = true
}
}