SetThreadAffinityMask设置使用多核CPU的哪个核心

MSDN上的描述: 

  1. SetThreadAffinityMask  
  2. The SetThreadAffinityMask function sets a processor affinity mask for the specified thread.  
  3.   
  4. DWORD_PTR SetThreadAffinityMask(  
  5.   HANDLE hThread,  
  6.   DWORD_PTR dwThreadAffinityMask  
  7. );  

Parameters 
hThread 
[in] Handle to the thread whose affinity mask is to be set. 
This handle must have the THREAD_SET_INFORMATION and THREAD_QUERY_INFORMATION access rights. For more information, see Thread Security and Access Rights. 

dwThreadAffinityMask 
[in] Affinity mask for the thread. 
Windows Me/98/95:  This value must be 1. 

Return Values 
If the function succeeds, the return value is the thread's previous affinity mask. 

Windows Me/98/95:  The return value is 1. To succeed, hThread must be valid and dwThreadAffinityMask must be 1. 

If the function fails, the return value is zero. To get extended error information, call GetLastError. 

Remarks 
A thread affinity mask is a bit vector in which each bit represents the processors that a thread is allowed to run on. 

A thread affinity mask must be a proper subset of the process affinity mask for the containing process of a thread. A thread is only allowed to run on the processors its process is allowed to run on. 

通过调用SetThreadAffinityMask,就能为各个线程设置亲缘性屏蔽: 

C++代码 

  1. DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);  

该函数中的h T h r e a d参数用于指明要限制哪个线程, dwThreadAffinityMask用于指明该线程能够在哪个CPU上运行。dwThreadAffinityMask必须是进程的亲缘性屏蔽的相应子集。返回值是线程的前一个亲缘性屏蔽。 

因此,若要将3个线程限制到CPU1、2和3上去运行,可以这样操作: 

C++代码 

  1. //Thread 0 can only run on CPU 0.  
  2.   
  3. SetThreadAffinityMask(hThread0, 0x00000001); //第0位是1  
  4.   
  5. //Threads 1, 2, 3 run on CPUs 1, 2, 3.//第1 2 3位是1  
  6.   
  7. SetThreadAffinityMask(hThread1, 0x00000002);  
  8.   
  9. SetThreadAffinityMask(hThread2, 0x00000003);  
  10.   
  11. SetThreadAffinityMask(hThread3, 0x00000004);  

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/W511522329/archive/2010/03/06/5352597.aspx 

C++代码 

  1. #include "stdafx.h"  
  2. #include <windows.h>    
  3. #include <string>  
  4. #include <iostream>  
  5. void running(int seconds)  {      
  6.         Sleep(seconds*1000);  
  7.         std::cout<<"sleep for "<<seconds<<"(s)"<<std::endl;  
  8. }    
  9.   
  10. int _tmain(int argc, _TCHAR* argv[])  
  11. {  
  12.     SetThreadAffinityMask(GetCurrentThread(), 1);  
  13.     LARGE_INTEGER start, end;            
  14.     LARGE_INTEGER freq;   
  15.     //timeConsuming();  
  16.     QueryPerformanceFrequency(&freq);  
  17.     QueryPerformanceCounter(&start);//start  
  18.   
  19.   
  20.     std::cout<<"start.QuadPart = "<<start.QuadPart<<std::endl;         //output start   
  21.     running(10); //running 10 seconds  
  22.     QueryPerformanceCounter(&end); //end  
  23.     std::cout<<"end.QuadPart = "<<end.QuadPart<<std::endl;    //output end   
  24.   
  25.     std::cout<<"consume value = end.QuadPart - start.QuadPart = "<<(end.QuadPart - start.QuadPart)<<std::endl;   
  26.     std::cout<<"(consume value/(double)freq.QuadPart) Time consumed = "<<(end.QuadPart - start.QuadPart)/(double)freq.QuadPart<<"(s)"<<std::endl;  //output consumed time  
  27.     return 0;  
  28. }  
时间: 2024-10-22 18:49:58

SetThreadAffinityMask设置使用多核CPU的哪个核心的相关文章

Win 7下提高双核、多核CPU的速度的设置方法

现在笔记本都配有双核的CPU,而Win 7对多核CPU有着良好的支持,如果没有对Win7系统进行设置,双核.多核CPU不能发挥其应有的速度,应该怎么样进行Win7设置才能提高双核.多核CPU的速度呢. 1.点击开始按钮,在开始菜单的搜索程序和文件输入框中输入Msconfig后回车,打开系统配置对话框. 2.切换到引导选项标签,点击高级项按钮,弹出引导高级选项对话框. 3.在对话框中勾选处理器数,在下拉菜单里选择处理器的数目,比如双核就选择2,并勾选最大内存选项,然后点击确定返回,重启电脑即可.

Nginx服务器进程数设置和利用多核CPU的方法_nginx

Nginx 配置文件 nginx.conf 首先需要找到 Nginx 的配置文件 nginx.conf 才能进行下面的操作,在LNMP一键安装包默认配置下,nginx.conf 存放在 /usr/local/nginx/conf/nginx.conf 至于其他环境下安装 Nginx 可以用 find / -name nginx.conf 来查找配置文件的存放路径. Nginx worker_processes进程数设置 Nginx 的配置文档 nginx.conf 中可以设置 worker_pr

多核CPU和它们带来的并发性改变

摩尔定律(戈登·摩尔 1965 年预测,每个集成电路的元件数量每 18 到 24 个月就会翻一倍)仍然适用,它的适用性 预计会持续到 2015-2020 年.2005 年之前,CPU 时钟速率也在同步提升,这本身已足以改进在这些 CPU 上执行的所有应 用程序的性能.应用程序开发社区只需对算法改进进行少量投资或者甚至无需投资,就可以坐享这一性能改进. 然 而,从 2005 年开始,时钟速率的增长和晶体管数量的增长已不再同步.由于处理器材料的物理性质限制,时钟速率已停止 增长(甚至下降),处理器制

服务器-CPU的多核心和编程里面的多线程有关联么

问题描述 CPU的多核心和编程里面的多线程有关联么 之前不知道哪里听说的服务器软件都是进程型的,所以服务器主机不要性能强的多核,要很多性能若的电脑分布式组合.java里面的多线程是为了节省程序自己的等待时间而设的,和电脑的核心数量有关系么.如果我的代码只有一个主线程,那么四核的电脑是不是只能用一个核心?因为可能要搭建小型服务器,提前了解下硬件方面的需求,大概也就服务1万人的微信群,对服务器有什么要求.一个是内存够大,另一个就是cpu了. 解决方案 有关系,首先Java线程底层的实现就是轻量级的进

多线程-多核cpu有多少个运算器,控制器和缓存

问题描述 多核cpu有多少个运算器,控制器和缓存 平时说的CPU都由运算器+控制器+缓存组成,那多核CPU是如何处理多线程的问题的呢 ?多核中的核,每个核都由自己的运算器和控制器以及缓存,但是共用总线的么?? 解决方案 要看具体的架构. 以Intel Core i7来说,它的每个内核拥有4条独立的流水线,每条流水线有17个工位.每个CPU又拥有4个(现在也有6个.8个内核的版本,移动平台也有2个内核的版本)内核. 因此理论上来说,相当于有16个运算器构成.至于控制器,在现代处理器中包括译码器.指

为什么基于线程的编程模型不是多核CPU时代的最佳选择

本文将解释为什么基于线程的编程并不是多核时代实现应用程序并行性的最佳方法. 摩尔定律(戈登·摩尔 1965 年预测,每个集成电路的元件数量每 18 到 24 个月就会翻一倍)仍然适用,它的适用性预计会持续到 2015-2020 年.2005 年之前,CPU 时钟速率也在同步提升,这本身已足以改进在这些 CPU 上执行的所有应用程序的性能.http://www.aliyun.com/zixun/aggregation/13521.html">应用程序开发社区只需对算法改进进行少量投资或者甚至

基于多核CPU的系统架构

自UTM产品诞生到现在,其技术已经从最初的以防火墙.入侵防御.防病毒的集成技术发展至以防火墙.入侵防御.防病毒.URL过滤.VPN.流量管理为主的集成技术.UTM市场规模在2010年达到约8.5亿人民币,有20家以上的厂商提供UTM产品,越来越多的用户开始选择UTM,或者从防火墙升级到UTM,来为自己的网络提供更深层次.更具管理性且更全面的防御能力. 同时,我们也要看到传统的UTM概念实际上是将多种技术集成在一个盒子里,没有考虑到太多产品集成调度的问题,由此导致数据包经过二次.三次甚至多次拆包.

转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作--一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核. 借用卡通人物Cartman的话,"如何我能使用这些内核"? 要

如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作--一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核. 借用卡通人物Cartman的话,"如何我能使用这些内核"? 要想让Linux命令使用所有的CPU内核,我们需要用到GNU Parallel命令,它让我们所有的CPU内核在单机内做神奇的map-reduce