一个进程中的多个线程可以在多核处理器上的 不同核上运行吗?

解决方案 »

  1.   

    可以,使用SetThreadAffinityMask将某个线程限制在某个CPU上执行。
    在驱动里,你可以提高当前IRQL来霸占某个CPU。
      

  2.   

    可以的 使用SetThreadAffinityMask(hthread,number),其中number就是你想绑定线程到指定cpu的掩码例如number=1,即cpu 0,number=3,二进制0000 0011,表示cpu 0 cpu1
      

  3.   

    楼上的tx说的这个方法是指定CPU或者内核绑定的方法么?如果不知定多线程的绑定,那么是如何执行的呢?多线程会不会分配到多CPU或者多核上执行呢?
      

  4.   

    未必,得看操作系统的支持和调度算法。
    这得看操作系统怎么管理CPU资源,运行在操作系统上的进程
    不止一个,每个进程的线程也可能多个。所以操作系统对于是
    把同一进程的线程分配到不同的CPU,还是在同一个CPU上使用
    轮训和调度权限改变来调度,这一切都是由操作系统的调度算法决定的。
      

  5.   

    好东西,但是如果这么简单就能利用多核的cpu,那为什么现在支持多核的软件、游戏少之又少,难道programer都不会用线程?
      

  6.   

    默认情况下是可以的,但是可以用SetProcessAffinityMask、SetThreadAffinityMask来修改。不过偶只知道有这些API,从来没有试过,微软文档也建议不要试着修改Affinity。
      

  7.   

    可以是可以,但是一个进程的所有线程序未必会在同一个CPU运行
    这个得看操作系统的支持和调度算法,这得看操作系统怎么管理
    CPU资源,运行在操作系统上的进程 不止一个,每个进程的线程
    也可能多个。所以操作系统对于是 把同一进程的线程分配到不同
    的CPU,还是在同一个CPU上使用 轮训和调度权限改变来调度,这
    一切都是由操作系统的调度算法决定的。
      

  8.   

    线程应该是一个并发的概念,不是并行的概念吧,并发是指每一时刻仅有一个线程投入运行,并行就不同了每一刻都有N多的线程在同时运行,共享系统资源,如果线程可以在多处理器上运行的话那就是并行了,如果是这样的话,应该是硬件CPU的研制跟不上软件的发展才对(多加线程提升软件的性能),但事实并非如此,