From 6c50fda1cd8aece3450d3fb29f519099c45b30ba Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Wed, 7 May 2025 01:42:43 +0800 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D1=80=D0=B0=D1=81=D1=87=D1=91=D1=82?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/checker/checker.go | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/app/checker/checker.go b/app/checker/checker.go index 51959b8..021e5b7 100644 --- a/app/checker/checker.go +++ b/app/checker/checker.go @@ -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,