可以在集群设置中修改节点最大并发读/写数

This commit is contained in:
GoEdgeLab
2024-04-30 19:09:40 +08:00
parent 06a8ec5dec
commit a951ecbb10
5 changed files with 115 additions and 10 deletions

View File

@@ -0,0 +1,36 @@
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package percpu
import (
"runtime"
)
type Chan[T any] struct {
c chan T
count int
cList []chan T
}
func NewChan[T any](size int) *Chan[T] {
var count = max(runtime.NumCPU(), runtime.GOMAXPROCS(0))
var cList []chan T
for i := 0; i < count; i++ {
cList = append(cList, make(chan T, size))
}
return &Chan[T]{
c: make(chan T, size),
count: count,
cList: cList,
}
}
func (this *Chan[T]) C() chan T {
var procId = GetProcId()
if procId < this.count {
return this.cList[procId]
}
return this.c
}

View File

@@ -0,0 +1,23 @@
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package percpu_test
import (
"github.com/TeaOSLab/EdgeNode/internal/utils/percpu"
"github.com/TeaOSLab/EdgeNode/internal/zero"
"testing"
)
func TestChan_C(t *testing.T) {
var c = percpu.NewChan[zero.Zero](10)
c.C() <- zero.Zero{}
t.Log(<-c.C())
select {
case <-c.C():
t.Fatal("should not return from here")
default:
t.Log("ok")
}
}