Como reduzir o uso da CPU?

0

Estou desenvolvendo um aplicativo que monitora coisas relacionadas ao sistema como CPU, RAM, etc. Mesmo com poucos dados durante o teste, sempre que executo meu código, há um aumento no uso da CPU geralmente em 30% por segundo sempre que os dados de pesquisa e depois retorna para normal. Então, existe alguma maneira de reduzir esse pico.

Aqui está o código:

package main

import (
    "fmt"
    "github.com/shirou/gopsutil/cpu"
    "github.com/shirou/gopsutil/mem"
    "github.com/shirou/gopsutil/process"
    "github.com/shirou/gopsutil/load"
    "github.com/shirou/gopsutil/disk"
    "github.com/shirou/gopsutil/host"
    "reflect"
    "time"
)

func main() {

    driveC := "C:"

    processor, _ := cpu.Times(false)
    memory,_ := mem.VirtualMemory()
    cpuPercent,_ := cpu.Percent(time.Second,false)



    fmt.Println(reflect.TypeOf(processor))
    fmt.Println(reflect.TypeOf(memory))
    fmt.Println(reflect.TypeOf(cpuPercent))


    fmt.Println("CPU")
    fmt.Println("CPU name",processor[0].CPU)
    fmt.Println("User time",processor[0].User)
    fmt.Println("Idle time",processor[0].Idle)
    fmt.Println("System time",processor[0].System)
    fmt.Println("Nice time",processor[0].Nice)
    fmt.Println("IOwait time",processor[0].Iowait)
    fmt.Println("Irq time",processor[0].Irq)
    fmt.Println("SoftIrq time",processor[0].Softirq)



    fmt.Println("CPU Percent",cpuPercent)
    //fmt.Println(memory.Total)


    infoStat, _ := cpu.Info()
    fmt.Printf("\n")
    fmt.Println("--> Hardware Info with Context:  ", infoStat)

    procCount, _ := cpu.ProcInfo()
    fmt.Printf("\n")
    fmt.Println("--> Process Count:  ", procCount)

    fmt.Println("-----------------DISK--------------------------------->")

    driveUsage, _ := disk.Usage(driveC)
    fmt.Printf("\n")
    fmt.Println("--> Disk Usage for :", driveUsage)

    partitionInfo, _ := disk.Partitions(true)
    fmt.Printf("\n")
    fmt.Println("--> Partitions :", partitionInfo)

    folderInfo, _ := disk.IOCounters("C:", "D:")
    //fmt.Printf("\nDisk IO counter remaining\n")
    fmt.Printf("\n")
    fmt.Println("-->Disk IO counter :", folderInfo)

    fmt.Printf("Docker remaining\n")
    fmt.Printf("\n")

    fmt.Println("-----------------Host--------------------------------->")

    hostInfo, _ := host.Info()
    fmt.Printf("\n")
    fmt.Println("--> Host Info :", hostInfo)

    /*userName, _ := host.Users()
    fmt.Printf("\n")
    fmt.Println("--> Username :", userName)*/

    fmt.Println("-----------------Load--------------------------------->")

    avgLoad, _ := load.Avg()
    fmt.Printf("\n")
    fmt.Println("--> Average Load :", avgLoad)

    avgMisc, _ := load.Misc()
    fmt.Printf("\n")
    fmt.Println("--> Misc :", avgMisc)

    fmt.Println("-----------------RAM--------------------------------->")

    virtMemory, _ := mem.VirtualMemory()
    fmt.Printf("\n")
    fmt.Println("--> Virtual Memory :", virtMemory)

    swapMemory, _ := mem.SwapMemory()
    fmt.Printf("\n")
    fmt.Println("--> Swap Memory :", swapMemory)

    //fmt.Println("Process running list")
    //processList()

}

SO - Windows 10, Linguagem de Programação - Golang

gadhvi
fonte
11
Evidência anedótica: quando abro o "monitor de atividade" em meus computadores, ele fica em ~ 70% da CPU por um segundo ou dois. Estou inclinado a acreditar que é o mais otimizado possível. Talvez, a coleta dessas métricas consuma muito tempo / ciclo.
Sergio Tulentsev 22/01
11
Por que você faz tudo reflect.TypeOfno início? Alguma coisa melhora se você pular essas?
Mad Wombat
11
Medir, perfilar, otimizar, repetir. Essa é a única solução para problemas de desempenho.
Adrian
@ MadWombat Eu tenho que remover algumas coisas para aprender sobre o tipo de dados do processador, memória.
gadhvi 23/01