进程线程优先级,亲缘性

xiaoxiao2022-06-11  32

 

 

亲缘性的意思是 进程只在某个cpu上运行 ,比如

BOOL WINAPI SetProcessAffinityMask( _In_ HANDLE hProcess, _In_ DWORD_PTR dwProcessAffinityMask ); dwProcessAffinityMask 如果是 0 , 代表当前进程只在cpu0 上工作; 如果是 0x03 , 转为2进制是 00000011 . 代表只在 cpu0 或 cpu1上工作;

 

优先级:

//注意, 如果线程的优先级会随着进程的优先级浮动 //线程:SetThreadPriority, GetThreadPriority SetPriorityClass(GetCurrentProcess(),HIGH_PRIORITY_CLASS ); DWORD pri = GetPriorityClass(GetCurrentProcess());

亲缘性:

#define CPU_MASK(mask) (1<<(mask)) SYSTEM_INFO sys; GetSystemInfo(&sys); DWORD cpuCount = sys.dwNumberOfProcessors; //cpu数量 4; DWORD_PTR pmask, smask; //进程mask, 系统mask; /* CPU_MASK(3) 代表 1<<3 -> 2进制 : 1000 . 意思是只能使用 cpu3 (cpu0 起算). 这个值不要超过cpuCount; SetProcessAffinityMask 设置之后可以在任务管理器中查看相关性. 一旦设置, 所有线程将只在这些cpu中执行.子进程也将继承. SetThreadAffinityMask 用法类似,但 mask 必须是进程使用的cpu 中的一项或几项; GetProcessAffinityMask 将返回2个mask , 一个是当前进程 一个是系统 */ SetProcessAffinityMask(GetCurrentProcess(),CPU_MASK(3)); GetProcessAffinityMask(GetCurrentProcess(),&pmask,&smask); cout << hex <<pmask << ',' << smask << endl;

 

转载请注明原文地址: https://www.6miu.com/read-4931246.html

最新回复(0)