- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不明白如何使用 SetThreadPriority
和 SetPriorityClass
来降低和增加线程的优先级。
我的理解是 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 并不完全正确,即使对于单个线程也是如此。
附加说明:SetProcessPriorityBoost
和 bDisablePriorityBoost = TRUE
对工作集没有任何此类影响。
关于windows - SetThreadPriority 和 SetPriorityClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631644/
public class MainActivity extends Activity { private int newThreadCount; private int uiCount; @Overr
我不明白如何使用 SetThreadPriority 和 SetPriorityClass 来降低和增加线程的优先级。 我的理解是 SetPriorityClass 选择进程可用的优先级范围,而 Se
我使用+ (BOOL)setThreadPriority:(double)p;来更改NSThread的优先级,但threadPriority始终为0.5。 setThreadPriority:的返回值
鉴于以下代码,我想知道在 linux 中假设 pthread 甚至使用 Boost.Thread API 的等效代码是什么。 #include int main() { SetThreadPr
java.lang.Thread.setPriority 和 android.os.Process.setThreadPriority 它们有什么不同? 首先,在java.lang.Thread类中,
如果我有这样的代码: Runnable r = ...; Thread thread = new Thread(r); thread.setPriority((Thread.MAX_PRIORITY
我是一名优秀的程序员,十分优秀!