使用线程能不能降低CPU占用率?

wesleyluo 2011-12-06 05:32:33
比如我有一个函数

First()
{
for(int i = 0; i < 5; i++)
//do something 这里占用CPU很高;
}

现在我把for里面的do something放到一个线程里面;
First()
{
for(int i = 0; i < 5; i++)
//创建一个线程do something ;这里样做了会使CPU 占用率降低吗?
}

这样有没有什么作用呢?我发现好像没啥作用。
...全文
548 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw_net 2011-12-06
  • 打赏
  • 举报
回复
多线程不能降低CPU利用率,全部sleep可以
qq120848369 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pathuang68 的回复:]

引用 1 楼 healer_kx 的回复:

当然了,Work总是要CPU分时间片去干的,线程的意义不是加速,而是不让某个线程单干或者阻塞。


++
说得很正确。

从绝对意义上来说,多线程会降低CPU的使用率(对于单核的情况)。

对于多核的CPU,比如4-core,有一个这样的计算任务:从1加到4亿,那么你可以一共开4个线程,第一个线程从1加到1亿,第二个线程从1亿零1……
[/Quote]

++

在CPU的线程数足够用的情况, 尽可能的利用线程可以并行运算, 正如pathuang68说的那样, 必须要做不同的事情, 如果是加锁做同一件事情, 又变成了串行了。
pathuang68 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]

当然了,Work总是要CPU分时间片去干的,线程的意义不是加速,而是不让某个线程单干或者阻塞。
[/Quote]

++
说得很正确。

从绝对意义上来说,多线程会降低CPU的使用率(对于单核的情况)。

对于多核的CPU,比如4-core,有一个这样的计算任务:从1加到4亿,那么你可以一共开4个线程,第一个线程从1加到1亿,第二个线程从1亿零1加到2亿...最后把4个线程算得的结果再加起来。这样做对降低CPU的使用率应该是有帮助的。
xxwy89 2011-12-06
  • 打赏
  • 举报
回复
多线程是提高系统并行吞吐率,从而提高提高系统利用率,不是为了加速某一程序的运行。加速的话涉及指令集,编译器优化,以及流水线等。
skyworth98 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
当然了,Work总是要CPU分时间片去干的,线程的意义不是加速,而是不让某个线程单干或者阻塞。
[/Quote

sp...........
线程最初的目的无非是让物理单线程系统能“同时”执行多个任务,从而避免某个任务阻塞cpu。。。
独孤过儿 2011-12-06
  • 打赏
  • 举报
回复
线程通常在下面这几个场合下有作用:

overlapping IO

Asynchronous

Realtime scheduling

看一下你的情况符合这三条不,然后就知道有没有效果了
caozl 2011-12-06
  • 打赏
  • 举报
回复
个人理解是:
多线程不能降低CPU占用率
如果你的CPU是多核心的话 可以提高你的CPU利用率 加快运算速度
同时把工作和界面线程分开可以用来防止长时间运算造成界面显示迟缓。
一叶之舟 2011-12-06
  • 打赏
  • 举报
回复
for(int i = 0; i < 5; i++)
{
//do something 这里占用CPU很高;
Sleep(500);
}
healer_kx 2011-12-06
  • 打赏
  • 举报
回复
当然了,Work总是要CPU分时间片去干的,线程的意义不是加速,而是不让某个线程单干或者阻塞。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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