掘金 后端 ( ) • 2024-04-29 16:56

theme: condensed-night-purple

一、从天而降的需求

有天,老板突然说他想要调整下服务器上进程的优先级,看看会不会有更好的性能表现?让我调研一下在windows机器上怎么实现?

二、专业研发的基本素养

一听是调研,那不是轻车熟路。熟练的打开Google,输入“修改进程优先级”,回车!

image.png

啊这...全是Linux相关的文章。一点不慌,加上关键词“Windows”,再搜一次。

image.png

Easy,分分钟搞定一个需求。不仅有UI版本,还有命令行版本。

三、整个文档交差

Windows的进程优先级

根据官方文档的介绍,一共有下面8个级别。 image.png

修改优先级的方法

方法一:通过任务管理器,修改进程优先级

image.png 如图所示,非常的简单,只要在“详细信息”找到对应的进程,右击“设置优先级”即可。修改后的优先级只能是提供的6种之一。

方法二:通过命令行修改

wmic process where ProcessId={pid} CALL setpriority "{prio}"

按上面的命令,将{pid}替换成目标进程id,{prio}替换成优先级。

prio的枚举如下:

prio 含义 realtime 实时 normal 正常 idle 低 high priority 高 below normal 低于正常 above normal 高于正常

方法三:Python代码

需要python3, 依赖模块pywin32。

import win32api,win32process,win32con
 
# 处理优先级常量
ABOVE_NORMAL_PRIORITY_CLASS   = 0x00008000
BELOW_NORMAL_PRIORITY_CLASS   = 0x00004000
HIGH_PRIORITY_CLASS           = 0x00000080
IDLE_PRIORITY_CLASS           = 0x00000040
NORMAL_PRIORITY_CLASS         = 0x00000020
REALTIME_PRIORITY_CLASS       = 0x00000100
 
# 获得进程句柄
hProcess = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)
 
# 设置进程优先级
win32process.SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS)
 
# 关闭进程句柄
win32api.CloseHandle(hProcess)

四、后续

老板:嗯,干的不错。我现在想改IO优先级。

我: (╯‵□′)╯︵┻━┻