windows核心编程之亲缘性

我们先来看张图:
这里写图片描述
假设这是一台电脑,这台电脑上,有3块插件板,12个CPU,3个内存
假设有1个线程,他可以在这12个CPU中的任何一个中运行,当CPU访问的内存是他自己插件板上的内存,运行的就快一些,否则就慢一些
所以,控制线程在某个特定的CPU或CPU子集上运行,这就叫做亲缘性

我们可以限制某个进程在哪个CPU上运行
BOOL SetProcessAffinityMask(
HANDLE hProcess, // 进程句柄
DWORD_PTR dwProcessAffinityMask // 进程的亲缘性屏蔽
);
举个例子,如果dwProcessAffinityMask为0x00000005,就表示该进程的线程只能在CPU0和CPU2上运行
BOOL GetProcessAffinityMask(
HANDLE hProcess, // 进程句柄
PDWORD_PTR lpProcessAffinityMask, // 进程的亲缘性屏蔽
PDWORD_PTR lpSystemAffinityMask // 系统的亲缘性屏蔽
);
这是一个获取进程亲缘性屏蔽的函数,很多人可能不理解lpSystemAffinityMask,这个指针的内容实际上是系统指定的那些CPU可以处理线程,举个例子,现在我们的电脑一般都有多个核,其实,我们也可以指定单核运行系统
这里写图片描述

这里写图片描述
这样就可以设定单核运行系统了,这样的话SystemAffinityMask的值应该是0x00000001(CPU0)
如果我想设置某个线程在哪个CPU上运行该如何处理呢?

DWORD_PTR SetThreadAffinityMask (
HANDLE hThread, // 线程句柄
DWORD_PTR dwThreadAffinityMask // 线程亲缘性屏蔽
);
windows98为单核操作系统,不管处理器有多少CPU,windows98只用一个,所以,在98上,屏蔽性只能写0x00000001
有时候,强行将某个线程分配给特定的CPU,而另外的CPU却无事可做。这个时候,我们告诉系统,我们想让线程在某个CPU上运行,但允许线程在可能的情况下移到其他CPU上,这个时候有另外一个函数
DWORD SetThreadIdealProcessor(
HANDLE hThread, // 线程句柄
DWORD dwIdealProcessor // 线程的首选CPU编号0-31
);

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值