zoukankan      html  css  js  c++  java
  • Process和Thread在指定CPU运行

    最近帮朋友写了一个多线程程序,他那边一运行多线程就出错,我这边却没有任何问题,找了好久才找到解决方法,原来是CPU的问题,有朋友遇到同样的问题,可以一起参考

    //进程与指定cpu绑定

    SetProcessAffinityMask(GetCurrentProcess(), dwMask);

     //线程与指定cpu绑定

    SetThreadAffinityMask(GetCurrentThread(),dwMask);

     dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2,以此类推。

    //使用8核CPU

    SetThreadAffinityMask(-1,254)

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

    //Thread 0 can only run on CPU 0. 
    
    SetThreadAffinityMask(hThread0, 0001); //第0位是1
    
    SetThreadAffinityMask(hThread1, 0002); 
    
    SetThreadAffinityMask(hThread2, 0003); 
    
    SetThreadAffinityMask(hThread3, 0004);

    如果要将3个进程限制到CPU1、2和3上去运行,可以这样操作

    SetProcessAffinityMask( hProcess0, 0001);// use CPU 0 only
    
    SetProcessAffinityMask( hProcess1, 0002 );// use CPU 1 only
    
    SetProcessAffinityMask( hProcess2, 0003 );// allow running on both CPUs
    
    SetProcessAffinityMask( hProcess3, 0004 );// use CPU 4 only

    应用场景举例:

    将UI线程限制在一个CPU,将其他实时性要求较高的线程限制在另一个CPU。这样,当UI需要占用大量CPU时间时,就不会拖累其他实时性要求较高的线程的执行。同样可以将UI线程与一些优先级不高但耗时的异步运算线程设置在不同CPU上,避免UI给人卡顿的感觉。

    相关文章https://support.microsoft.com/zh-cn/kb/932375

  • 相关阅读:
    group by;having;order by
    oracle官方文档
    oracle正则表达式函数和正则表达式简介
    oracle系统函数
    oracle系统表
    windows搭建ftp服务器
    开机自动挂载
    linux修改设置ip地址
    My First Web Server
    为什么要写博客?
  • 原文地址:https://www.cnblogs.com/testsec/p/5897670.html
Copyright © 2011-2022 走看看