免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5457 | 回复: 10
打印 上一主题 下一主题

【请教】CPU多线程意义所在 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-19 23:38 |只看该作者 |倒序浏览
一直不是很清楚,multi-thread的作用是什么?
如果是为了在多任务的情况下充分利用CPU,这个工作OS的dispatcher不是同样可以完成,为何要在CPU上弄出multi-thread?
我想这么设计应当有道理,就是不知道道理在哪...盼教!

论坛徽章:
7
荣誉会员
日期:2011-11-23 16:44:17水瓶座
日期:2013-08-28 21:20:16丑牛
日期:2013-10-02 21:01:462015年迎新春徽章
日期:2015-03-04 09:54:45操作系统版块每日发帖之星
日期:2016-06-05 06:20:0015-16赛季CBA联赛之吉林
日期:2016-06-20 08:24:0515-16赛季CBA联赛之四川
日期:2016-08-18 15:02:02
2 [报告]
发表于 2009-03-20 08:18 |只看该作者
我不是搞编程的,我听到的大致意思是,如果是单线程的cpu,那么当
cpu发出指令,需要到内存中存取数据,这时候cpu必须等内存的数据取回来,然后才能操作其他指令,否则cpu会处于一直等待的状态,
cpu处理指令的时间片一般远远小于内存存取数据的时间片,因此对cpu的资源造成严重的浪费。

这时候,就出现了多线程,一个线程在等待的话,cpu上的其他线程也可以干活。

论坛徽章:
0
3 [报告]
发表于 2009-03-20 12:40 |只看该作者
我听说是为了更小的系统开销,和多cpu利用率的问题。

也看到人家测试几个thread同时运行的情况下,比单个进程更糟糕的情景。

论坛徽章:
2
丑牛
日期:2014-06-11 13:55:04ChinaUnix元老
日期:2015-02-06 15:16:14
4 [报告]
发表于 2009-03-20 13:01 |只看该作者
为了炒作新技术

论坛徽章:
0
5 [报告]
发表于 2009-03-20 13:46 |只看该作者
2楼正解。除了以上原因外,多核多线程CPU在制造成本、功耗上相对于单核心CPU有优势,又比较顺应当前绿色环保的倡议。对于某些人来讲,可能没什么用,甚至可以认为是炒作,不过对于大型的数据中心而言,这却非常有吸引力的。

3楼提出的疑惑很有可能是由于多线程应用设计有问题,比如:多线程同时争抢互斥资源,非但每次仍然只有一个线程运行,还导致额外开销浪费在互斥处理上,这一般可以通过调整应用来解决的。

论坛徽章:
0
6 [报告]
发表于 2009-03-21 12:48 |只看该作者
多谢几位!

也就是说,多线程实际上并不是CPU绝对能力的增强,只是对其工作方法的优化。而且想要这种优化取得效果,必须要CPU、OS、App同时支持才行。

那支持多线程和不支持多线程的CPU,在对一个单线程的app的处理能力上,会有实际差别么?

论坛徽章:
2
丑牛
日期:2014-06-11 13:55:04ChinaUnix元老
日期:2015-02-06 15:16:14
7 [报告]
发表于 2009-03-22 10:46 |只看该作者

回复 #6 fluke888 的帖子

这个很难比较,因为很难找到 支持多线程和不支持多线程的 对等的CPU

论坛徽章:
0
8 [报告]
发表于 2009-03-22 12:28 |只看该作者
多线程的CPU,就相当于多个执行单元的CPU。
这个主要是跟近代程序编译的优化有关。
比如说下面的伪程序:
a = 3 + 4;
b = 4 + 6;
c = a + b;
对于单线程的CPU来说,不管怎么优化,也只能按照程序语句的顺序一步一步的执行下来。如果我们假设CPU每执行一条语句都需要一个CPU周期(只是假设,实际中可能不止一个周期),那么三条语句就需要三个CPU周期了。
但是对于多线程的CPU来说,由于第一句和第二句之间没有什么相关性,也就是说这两条语句先执行哪一条都没有关系,都能得到正确的结果,所以,通过编译时的优化,就可以把a = 3 + 4; 和 b = 4 + 6;这两条语句放在同一个CPU周期里执行,只不过是在不同的执行单元上执行,这样一来,还是按前面的假设,每一条语句需要一个CPU周期,那么执行三条语句只需要两个CPU周期了,在第一个CPU周期当中就同时算出了a和b的值,第二个周期中算出以的值,显然执行速度更快了。

论坛徽章:
0
9 [报告]
发表于 2009-03-22 21:50 |只看该作者
原帖由 fluke888 于 2009-3-21 12:48 发表
多谢几位!

也就是说,多线程实际上并不是CPU绝对能力的增强,只是对其工作方法的优化。而且想要这种优化取得效果,必须要CPU、OS、App同时支持才行。

那支持多线程和不支持多线程的CPU,在对一个单线程的 ...

不同CPU产商所设计的多线程CPU可能在原理上稍有差别,但是对于单线程应用而言,由于应用同一时刻只能占用一路CPU,显然多线程CPU的设计对于这种应用没有任何用武之地。非但没用,甚至有可能会有反作用。因为多线程CPU的各硬件线程单元可能会共享一些资源,比如片上的缓存等,为了防止多线程并发访问可能带来的数据竞争冲突,通常会引入一些互斥锁操作,这些额外开销对于多线程并发所带来的好处而言,可能并不是问题。但对于单线程应用而言,则完全成为了额外开销。另外,多线程CPU在管线设计方面可能比传统的单线程CPU有所简化(因为设想性能可以通过多线程并发而显著提升),所以,对于单线程应用而言,其运行性能可能在传统单线程CPU会更好些。要充分发挥多线程CPU的性能优势,应用必须采用高度并发的多线程设计。

论坛徽章:
0
10 [报告]
发表于 2009-03-24 15:57 |只看该作者
ok,基本了解了。多谢各位!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP