gpt4 book ai didi

windows - SetThreadPriority 和 SetPriorityClass

转载 作者:可可西里 更新时间:2023-11-01 14:45:13 28 4
gpt4 key购买 nike

我不明白如何使用 SetThreadPrioritySetPriorityClass 来降低和增加线程的优先级。

我的理解是 SetPriorityClass 选择进程可用的优先级范围,而 SetThreadPriority 设置类内的相对优先级。

例如,对线程执行此操作的结果是什么:

SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN);

SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);

感谢您的帮助。

最佳答案

关于 PROCESS_MODE_BACKGROUND_BEGIN 我观察到但显然没有记录的一件事是,至少在 Windows 7 下它永久清空进程的工作集,无论进程如何访问内存 - 直到后台模式结束。

例如,通常没有PROCESS_MODE_BACKGROUND_BEGIN,当我的机器有千兆字节的空闲内存,进程需要消耗和不断处理千兆字节的内存时,进程工作集将大约等于分配大小。也就是说,该进程获得了它在其工作集中使用的所有内存。好的。
现在,使用PROCESS_MODE_BACKGROUND_BEGIN工作集将达到几十兆字节!
糟糕的结果是,这会导致持续的页面错误,并且计算运行速度会慢得多!页面错误很可能不是页面文件,而是 Windows 缓存内存。但是页面错误仍然会显着降低计算速度,同时还会导致 CPU 被无意义的负载消耗。

总之,PROCESS_MODE_BACKGROUND_BEGIN 不适合低优先级后台工作。这项工作将非常耗时且能源效率低下
PROCESS_MODE_BACKGROUND_BEGIN 仅适用于进程确实不打算执行后台消耗的任何操作

相比之下THREAD_MODE_BACKGROUND_BEGIN 没有这种可怕的效果,即使该线程是进程中的唯一线程。
另请注意,您需要永久关闭PROCESS_MODE_BACKGROUND_BEGIN,仅使用PROCESS_MODE_BACKGROUND_END。在 PROCESS_MODE_BACKGROUND_BEGIN 之后调用 THREAD_MODE_BACKGROUND_END 是不够的。
因此,对于 THREAD_MODE_BACKGROUND_END 撤消 PROCESS_MODE_BACKGROUND_BEGIN 效果的说法,Arno 并不完全正确,即使对于单个线程也是如此。

附加说明:SetProcessPriorityBoostbDisablePriorityBoost = TRUE 对工作集没有任何此类影响。

关于windows - SetThreadPriority 和 SetPriorityClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631644/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com