双核CPU,多线程负载不均衡问题

allengw 2009-07-27 09:25:17
程序的主要结构如下:
Thread1()
{
//线程1函数
};

Thread2()
{
//线程2函数
};

main()
{

CreatThread1();//创建线程1
CreatTrhead2();//创建线程2

}

程序的结构如上所示,在主程序里创建了两个线程,两个线程执行几乎相同的程序,也就是说两个线程的计算量是相似的。该程序运行在双核处理器上。在windows任务管理器中观察两个CPU的使用率,为什么一个CPU占用率在80%,而另外一个却只有10%左右。两个线程不是应该在两个CPU上同时运行么?占用率为何有这么大的差距?百思不得起解,望各位帮忙,谢谢。在线等。
...全文
1054 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
allengw 2009-07-27
  • 打赏
  • 举报
回复
理论上,创建的两个线程,不是应该由系统自动分配到两个CPU上运行么?为何还要手工自己指定呢?这样做,是不是会影响程序的运行效率呢?谢谢
wdx65000971c 2009-07-27
  • 打赏
  • 举报
回复
要设定CPU亲和性吧。指定代码更容易被OS调度运行在哪个CPU上。
allengw 2009-07-27
  • 打赏
  • 举报
回复
可是为什么有的时候一个CPU的占用率都要满负荷了,而另外一个CPU的占用率却很低,这是不是说明调度不均衡问题呢?该怎么解决呢?
code_killer 2009-07-27
  • 打赏
  • 举报
回复
系统中应该有数百个线程,OS不一定非要把所有的计算量平均分配给两个CPU。
如果你的两个线程计算量相当,优先级一样,那么应该用大致相同的时间运行完,
否则就说明os的线程调度算法不太合理。
allengw 2009-07-27
  • 打赏
  • 举报
回复
有没有人来帮忙啊?谢谢了。
池塘边的榕树 2009-07-27
  • 打赏
  • 举报
回复
让你的线程使用多个CPU
void SetCPU(DWORD dwThreadPriority)
{
// 使用多个CPU
SYSTEM_INFO sysinf;
GetSystemInfo(&sysinf);
long tprocs = sysinf.dwNumberOfProcessors;
HANDLE hHandle = GetCurrentThread();

if( hHandle )
{
if ( 1 < tprocs )
{
DWORD cpuMark = 0;
for(int i=0; i<tprocs ;i++)
{
DWORD tmp = 1;
cpuMark += (tmp<<i);
}
SetThreadAffinityMask (hHandle, cpuMark);
}
}

if( hHandle ) { SetThreadPriority(hHandle, dwThreadPriority); }

return ;

}

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧