首页 > 系统相关 >Windows 系统中CPU 利用率那些事

Windows 系统中CPU 利用率那些事

时间:2024-07-01 10:59:18浏览次数:19  
标签:Windows text 利用率 时间 ctypes CPU

Windows 平台下 CPU 使用率的计算

在 Windows 平台下,CPU 使用率通过计算 CPU 在用户态和内核态的时间与总时间的比值来确定。任务管理器的刷新周期通常为 1 秒,这意味着在每秒刷新时计算 CPU 的忙碌时间与总时间的比值。CPU 使用率可以通过以下公式计算:

[ \text{CPU 使用率} = 1 - \frac{\text{空闲时间}}{\text{总的 CPU 时间}} \times 100 ]

其中:

  • (\text{总的 CPU 时间} = \text{用户态时间} + \text{内核态时间})
  • (\text{空闲时间}) 是 CPU 处于空闲状态的时间

获取 CPU 时间信息的方法

在 Windows 中,可以使用以下 API 获取 CPU 时间信息:

  • GetSystemInfo:获取系统信息,包括 CPU 的数量。
  • GetSystemTimes:获取系统总的 CPU 时间(用户态时间、内核态时间和空闲时间)。

代码示例

下面的 Python 示例代码展示了如何使用 ctypes 库从 Windows API 获取 CPU 时间,并计算 CPU 使用率。

import ctypes
import time

class FILETIME(ctypes.Structure):
    _fields_ = [("dwLowDateTime", ctypes.c_uint32),
                ("dwHighDateTime", ctypes.c_uint32)]

def filetime_to_int(filetime):
    return (filetime.dwHighDateTime << 32) + filetime.dwLowDateTime

def get_cpu_times():
    idle_time = FILETIME()
    kernel_time = FILETIME()
    user_time = FILETIME()
    
    ctypes.windll.kernel32.GetSystemTimes(ctypes.byref(idle_time), ctypes.byref(kernel_time), ctypes.byref(user_time))
    
    return (filetime_to_int(idle_time), filetime_to_int(kernel_time), filetime_to_int(user_time))

def calculate_cpu_utilization(prev_times, current_times):
    prev_idle, prev_kernel, prev_user = prev_times
    curr_idle, curr_kernel, curr_user = current_times

    idle_time = curr_idle - prev_idle
    kernel_time = curr_kernel - prev_kernel
    user_time = curr_user - prev_user
    total_time = kernel_time + user_time
    
    utilization = 1 - (idle_time / total_time)
    
    return utilization * 100

prev_times = get_cpu_times()
time.sleep(1)
current_times = get_cpu_times()

cpu_utilization = calculate_cpu_utilization(prev_times, current_times)
print(f"CPU Utilization: {cpu_utilization:.2f}%")

为什么会出现超过 100% 的 CPU 利用率

出现超过 100% 的 CPU 利用率的原因可能包括以下几点:

  1. 多核处理器:在多核处理器系统中,每个核心的利用率可以独立计算。例如,一个四核处理器的总利用率最大可以达到 400%。
  2. 计数错误或采样误差:某些监控工具可能在计算 CPU 利用率时出现误差或采样不准确,从而导致显示的利用率超过 100%。
  3. 高优先级进程:某些高优先级进程可能会被操作系统安排使用更多的 CPU 时间,从而导致报告的利用率超过 100%。

标签:Windows,text,利用率,时间,ctypes,CPU
From: https://blog.csdn.net/gygkhd/article/details/140095191

相关文章

  • Win10需要使用新应用以打开此windowsdefender链接怎么解决?
    1、以管理员身份打开“WindowsPowerShell”。 2、以管理员身份在Powershell中依次运行如下命令即可解决。1.$BasePath=Get-Content.appx.list(报错不要管)2.$BasePath|%{$Path=$($_).Trim()Add-AppxPackage-Register-DisableDevelopmentMode“$PathAppXManifest.xml......
  • Windows11系统System.Workflow.Activities.resources.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Workflow.Activities.resources.dll......
  • Windows11系统System.Windows.Controls.Ribbon.resources.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Windows.Controls.Ribbon.resources.......
  • Windows11系统System.Windows.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Windows.dll文件(挑选合适的版本文件......
  • WPF在.NET9中的重大更新:Windows 11 主题
    在2023年的2月20日,在WPF的讨论区,WPF团队对路线的优先级发起了一次讨论。对三个事项发起了投票。第一个是Windows11主题第二个是更新的控件第三个是可空性注释最终Windows11主题得票最高,WPF团队2023-2024的工作优先级就是Windows11主题了。WPF控件的外观多年来一......
  • 【python零基础入门到就业】002、2024最新windows环境下python的下载和安装
    文章目录1.引言2.检查是否已安装Python3.在Windows上安装Python3.1下载Python安装包3.2安装Python3.3验证安装4.结语1.引言在开始编写Python代码之前,我们首先需要在计算机上安装Python。本文将详细介绍如何在Windows系统上下载和安装Python。2......
  • Linux和windows网络配置文件的修改
    Linux和windows网络配置文件的修改网络配置文件是计算机网络管理中至关重要的一部分。正确配置网络文件可以确保计算机与网络设备之间的通信顺畅,避免网络故障。本文将详细介绍网络配置文件的修改方法,包括常见命令、使用方法举例,以及一些优化建议。一、网络配置文件概述网......
  • 使用PowerShell执行的命令和示例,用于增强Windows系统的安全性巡检项目:2024
    使用PowerShell执行的命令和示例,用于增强Windows系统的安全性巡检项目:检查系统服务和进程:powershellCopyCode#列出所有正在运行的服务Get-Service|Where-Object{$_.Status-eq'Running'}#列出所有正在运行的进程Get-Process检查本地安全策略和组策略:powersh......
  • 如何在Windows11下部署Linux子系统中安装GCC编译器
    GCC编译器安装:1:gcc出现命令找不到2.直接按照提示来安装。会发现链接找不到服务器原因是因为默认的服务器在国外,无法直接进行访问,需要切换成国内的服务器3.切换软件源——换成国内的服务器注意:软件源要与版本号一致!演示所用均为22.04版本号,可根据版本号找对应的软件......
  • Windows HLK测试
    一、环境前期准备测试服务器上安装windowsserver2016英文版;测试系统上安装windows10英文版;环境部署参考:WindowsHardwareLabKit二、部署方案WindowsHLK有两种部署方案:加入域的环境和工作组环境,因公司规模小,选择工作组环境。三、开始安装1、测试服务器上安......