如何让程序只在一个CPU核心上运行

如何让程序只在一个CPU核心上运行,第1张

你好,CPU是每掘巧个核心都是平均分配的,目前有的老游戏不支持多核心,手动是这样的:你运行游戏的时候可以打开任务管理器,看哪个核心的负荷最高,然后找到你的做散喊游戏进程,右键

-关系设置,然后把负荷最高的核心前面的勾去掉,然后重纯野新勾上,在看时几个核心的负荷就平均了,希望能帮到你!

实现方法进程与指定cpu绑定 :SetProcessAffinityMask(GetCurrentProcess(),dwMask); 线程李袭搭与指定cpu绑定: SetThreadAffinityMask(GetCurrentThread(),dwMask);dwMask为CPU序号的或运算值:1(0001) 代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2 ,以此类推。

设置之前最好判断一下系统有几个CPU: SYSTEM_INFOSystemInfoGetSystemInfo(&SystemInfo);CPU个数:SystemInfo.dwNumberOfProcessors 当前启用的CPU序号: SystemInfo.dwActiveProcessorMask ,Mask representing the set of processors configured into the system. Bit 0 is processor 0bit 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给人卡顿的感觉。

你说的那种情况4核CPU利用率只有25%是那个程序不支持多核运算。

如果你试试Rar一类的支持多核的软件,复制或者压缩的时候就可以达到100%的利用率了。

windows中分禅冲轿进程和线程,一个程序一般是一个进程(比如wps或者AutoCAD)。也有一些程序采用多进程架构,比如浏览器(IE8以上,Chrome,遨游等)。

不支持多核运算的程序,一般进程内部的线程数比较少,也就是一个或两个。

而支判派持多核贺肆运算的程序进程中的线程数最少等于cpu的核心数量(也有可能是2倍,英特尔超线程技术)。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12507533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存