This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user