Windows线程调度程序是不公平的?
发布时间:2020-12-14 02:22:47 所属栏目:Windows 来源:网络整理
导读:有时候,当我运行这个简单的程序时 #include Windows.hDWORD WINAPI ThreadStart(LPVOID){ for (;;) { } return 0;}int _tmain(){ SetPriorityClass(GetCurrentProcess(),BELOW_NORMAL_PRIORITY_CLASS); SYSTEM_INFO si; GetSystemInfo(si); for (DWORD i = s
有时候,当我运行这个简单的程序时
#include <Windows.h> DWORD WINAPI ThreadStart(LPVOID) { for (;;) { } return 0; } int _tmain() { SetPriorityClass(GetCurrentProcess(),BELOW_NORMAL_PRIORITY_CLASS); SYSTEM_INFO si; GetSystemInfo(&si); for (DWORD i = si.dwNumberOfProcessors * 2; i > 0; i--) { CloseHandle(CreateThread(NULL,&ThreadStart,NULL,NULL)); } Sleep(INFINITE); } 我经常观察到不公平的线程调度,例如: 这对每次运行都不公平,但是当它运行时,它在应用程序的整个生命周期中都是不公平的. 为什么会发生这种情况,以及避免它的正确方法是什么? 解决方法
一些选择:
如果(并且仅当)运行Windows 7/8 64位(非32位)或Windows Server 2008 R2或更高版本,则可以完全绕过系统调度程序并自行处理,尽管它不是琐碎的事业! 它是described on MSDN here,称为用户模式调度(UMS). 以下来自MSDN的部分截图 – 这对您有用吗? 此外,在BIOS中禁用超线程可能是一个想法(如果适用),因为关于Windows如何区分逻辑和物理内核存在争议. See here for a discussion. 还有一些可用的功能,如SetThreadAffinityMask()(MSDN here)和SetThreadIdealProcessor()可能会有所帮助,虽然我个人认为这有点昙花一现.我经常会损害整体吞吐量而不是帮助它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- windows – R devtools不适用于R 3.0.1?
- windows-server-2008-r2 – 如何在Windows Serve
- windows-7-x64 – 用户sa在SQL Server 2008 R2上
- Windows 2012 R2启动按钮无法通过RDP工作
- windows – 独立或企业CA – 我有什么?
- windows-7 – SSD硬盘RAID-0效率?
- 为Windows Mobile,Android和iPhone开发C#应用程序
- Skype接管网址
- Windows Server 2016-Active Directory域服务端口
- windows-server-2003 – .NET 3.5 SP1安装程序挂
热点阅读