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