mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2026-01-06 07:45:47 +08:00
优化并发读写限制
This commit is contained in:
@@ -8,8 +8,8 @@ import (
|
||||
)
|
||||
|
||||
var maxThreads = runtime.NumCPU()
|
||||
var WriterLimiter = NewLimiter(max(maxThreads, 4))
|
||||
var ReaderLimiter = NewLimiter(max(maxThreads*2, 8))
|
||||
var WriterLimiter = NewLimiter(max(maxThreads, 8))
|
||||
var ReaderLimiter = NewLimiter(max(maxThreads, 8))
|
||||
|
||||
type Limiter struct {
|
||||
threads chan struct{}
|
||||
@@ -60,7 +60,7 @@ func (this *Limiter) Ack() {
|
||||
}
|
||||
|
||||
func (this *Limiter) TryAck() bool {
|
||||
const timeoutDuration = 1 * time.Second
|
||||
const timeoutDuration = 500 * time.Millisecond
|
||||
|
||||
var timeout *time.Timer
|
||||
select {
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
package fsutils
|
||||
|
||||
import "os"
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
func Remove(filename string) (err error) {
|
||||
WriterLimiter.Ack()
|
||||
@@ -31,3 +33,24 @@ func WriteFile(filename string, data []byte, perm os.FileMode) (err error) {
|
||||
WriterLimiter.Release()
|
||||
return
|
||||
}
|
||||
|
||||
func OpenFile(name string, flag int, perm os.FileMode) (f *os.File, err error) {
|
||||
if flag&os.O_RDONLY == os.O_RDONLY {
|
||||
ReaderLimiter.Ack()
|
||||
}
|
||||
|
||||
f, err = os.OpenFile(name, flag, perm)
|
||||
|
||||
if flag&os.O_RDONLY == os.O_RDONLY {
|
||||
ReaderLimiter.Release()
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func Open(name string) (f *os.File, err error) {
|
||||
ReaderLimiter.Ack()
|
||||
f, err = os.Open(name)
|
||||
ReaderLimiter.Release()
|
||||
return
|
||||
}
|
||||
|
||||
17
internal/utils/fs/os_test.go
Normal file
17
internal/utils/fs/os_test.go
Normal file
@@ -0,0 +1,17 @@
|
||||
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
|
||||
package fsutils_test
|
||||
|
||||
import (
|
||||
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOpenFile(t *testing.T) {
|
||||
f, err := fsutils.OpenFile("./os_test.go", os.O_RDONLY, 0444)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = f.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user