如何设置进程(线程)在指定的CPU上运行
来源:互联网 发布:怎样安装税控盘软件 编辑:程序博客网 时间:2024/05/02 02:15
转自:http://blog.csdn.net/harbinzju/article/details/7023630
实现方法
进程与指定cpu绑定:SetProcessAffinityMask(GetCurrentProcess(), dwMask);
线程与指定cpu绑定:SetThreadAffinityMask(GetCurrentThread(),dwMask);
dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2,以此类推。
设置之前最好判断一下系统有几个CPU:
SYSTEM_INFO SystemInfo;
GetSystemInfo(&SystemInfo);
CPU个数:SystemInfo.dwNumberOfProcessors
当前启用的CPU序号:SystemInfo.dwActiveProcessorMask,Mask representing the set of processors configured into the system. Bit 0 is processor 0; bit 31 is processor 31.
CPU亲缘性介绍
按照默认设置,当系统将线程分配给处理器时,Windows使用软亲缘性来进行操作。这意味着如果所有其他因素相同的话,它将设法在它上次运行的那个处理器上运行线程。让线程留在单个处理器上,有助于重复使用仍然在处理器的内存高速缓存中的数据。
有一种新的计算机结构,称为NUMA(非统一内存访问),在该结构中,计算机包含若干块插件板,每个插 件板上有4个CPU和它自己的内存区。当CPU访问的内存是它自己的插件板上的内存时,NUMA系统运行的性能最好。如果CPU需要访问位于另一个插件板上的内 存时,就会产生巨大的性能降低。在这样的环境中,就需要限制来自一个进程中的线程在共享同一个插件版的CPU上运行。为了适应这种计算机结构的需要,Windows允许你设置进程和线程的亲缘性。换句话说,你可以控制哪个CPU能够运行某些线程。这称为硬亲缘性。请注意,子进程可以继承进程的亲缘性。
注意:
(1)无论计算机中实际拥有多少个CPU,Windows98及以前系统只使用一个CPU,上述API不被支持。
(2)在大多数环境中,改变线程的亲缘性就会影响调度程序有效地在 各个CPU之间移植线程的能力,而这种能力可以最有效地使用CPU时间。应用场景举例:
将UI线程限制在一个CPU,将其他实时性要求较高的线程限制在另一个CPU。这样,当UI需要占用大量CPU时间时,就不会拖累其他实时性要求较高的线程的执行。同样可以将UI线程与一些优先级不高但耗时的异步运算线程设置在不同CPU上,避免UI给人卡顿的感觉。
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 在VB中如何让线程或进程在指定的CPU上运行
- 如何让进程运行在指定的cpu上
- 通过设置进程或线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行
- Linux编程-让进程或线程运行在指定的CPU上
- 如何将所有的进程运行在一个指定的CPU上
- 如何将所有的进程运行在一个指定的CPU上
- 如何将所有的进程运行在一个指定的CPU上
- 如何将所有的进程运行在一个指定的CPU上
- 如何将所有的进程运行在一个指定的CPU上
- linux下让进程运行在指定的cpu上
- linux下让进程运行在指定的cpu上
- linux下让进程运行在指定的cpu上
- linux下让进程运行在指定的cpu上
- iOS关于自动布局(Autolayout)SizeClass
- 100-150
- mac下不能卸载和升级numpy的解决办法
- CodeForces A. Wet Shark and Odd and Even
- Eclipse 中安装 Pydev 插件
- 如何设置进程(线程)在指定的CPU上运行
- C#索引器
- 帐号激活与忘记密码 实例
- Mina IoBuffer的特性介绍
- Java入门(一)——了解java、搭建开发平台
- eclipse 删除所有注释及空白行
- leetcode 25. Reverse Nodes in k-Group
- iOS —— 数据解析Null处理
- Intersection of Two Linked Lists