如何禁止任何应用程序的所有线程在特定 CPU 核心上运行,除非我指定的线程(在 Win/nix 中)?
要将线程或进程绑定到特定的 CPU 内核,我们可以使用 OS-API 函数:POSIX 中的 sched_setaffinity() 和 WINAPI 中的 SetProcessAffinityMask()、SetThreadAffinityMask()。
但是,如果我们希望在这些核上不会启动当前在操作系统上运行的许多第三方应用程序的任何其他线程,该怎么办呢?
UPDATE:需要一个实时系统——必须有由我指定的线程从未发生过上下文切换,或者临时挂起。
可能的解决方案:
- 使用实时操作系统,例如QNX
- 除了绑定到处理器核心之外,还可以设置实时的优先级
- 使用 XEN 虚拟化跨操作系统分配处理器内核
使用固定内存可以轻松解决页面错误:(POSIX) mlock() 或 (WINAPI) VirtualLock()
如果您将进程和线程设置为实时优先级,它们就会把其他一切都排除在外。使用设置优先级 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686219%28v=vs.85%29.aspx设置进程优先级和设置线程优先级 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686277%28v=vs.85%29.aspx对于线程,像这样:
SetPriorityClass(HProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(HThread, THREAD_PRIORITY_TIME_CRITICAL);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)