Переработка расчёта нагрузки
All checks were successful
release / release (push) Successful in 1m0s

This commit is contained in:
2025-05-07 01:42:43 +08:00
parent dcf91c86d9
commit 6c50fda1cd

View File

@@ -268,33 +268,18 @@ func CheckChannels(pls playlist.Playlist) playlist.Playlist {
// calcParameters вычисляет оптимальное количество горутин и таймаут запроса
func calcParameters(count int) (time.Duration, int) {
// коэффициент нагрузки
var k float32
// чем ниже, тем больше горутин, меньше таймаут, быстрее проверка, хуже результаты
// чем выше, тем меньше горутин, больше таймаут, медленнее проверка, лучше результаты
var routines int
var percentage float32
switch true {
case count >= 4000:
k = 5
case count >= 3000:
k = 4.5
case count >= 2500:
k = 4
case count >= 2000:
k = 3.5
case count >= 1500:
k = 3
case count >= 1000:
k = 2.5
case count >= 500:
k = 2
case count >= 100:
k = 1.5
default:
k = 1
if count <= 100 {
routines = count
} else {
percentage = float32(runtime.NumCPU()) * 0.075
for percentage >= 1 {
percentage *= 0.5
}
routines = int(float32(count) * percentage)
}
routines := int(float32(count) / k / float32(runtime.NumCPU()))
if routines > 500 {
routines = 500
}
@@ -302,7 +287,7 @@ func calcParameters(count int) (time.Duration, int) {
routines = 1
}
timeout := 10/k + 2
timeout := 10 / float32(count) * 150
if timeout > 10 {
timeout = 10
}
@@ -312,7 +297,7 @@ func calcParameters(count int) (time.Duration, int) {
duration := time.Duration(timeout) * time.Second
log.Printf(
"Check parameters calculated: count=%d timeout=%.2fs routines=%d\n",
"Check parameters calculated count=%d timeout=%.2fs routines=%d\n",
count,
duration.Seconds(),
routines,