在网上看到很有意思的问题,摘下来好好看下
原文链接为:http://www.javaeye.com/topic/309652?page=1
在面试的时候被问了一个多线程的问题
回来仔细思考了一下,多线程是否真的能提高了效率?
我对多线程的理解就是:
比如挖一个隧道,有2种开工方法
1、只在山的一头挖,直至挖到山的另一头,从而打通隧道,这可以看成是单线程
2、在山的两头挖,同时开工,最后在山的中间接通,从而打通隧道,这感觉肯定比1快了很多,好比多线程
但是2成立的前提是必须有两个工人。而我们的计算机中一般来说只有一个CPU,也就是说只有一个工人。
多线程不过是CPU在不同的时间片之间切换,而表现出齐头并进的样子。
既然挖隧道的人只有一个,虽然我的施工方案是在山的两头开挖,但是由于工作的人只有一个,所以只有让这个人在山的两头跑,挖一会这头再去挖另一头,来回跑是要花费额外时间的(好比线程的切换和调度)。
那么,我们是不是可以说,在单CPU的机器中,多线程反而降低了效率呢?
下面是觉得还行的回答
楼主提的问题很有意思。经典的解释是 - 如果cpu确实是一个挖山工人,那么它工作就好像是挖1个小时,然后休息10个小时;这期间如果让它跑到山那头继续挖,效率还是很高的。
pc机不光只一个cpu,cpu和其它硬件设备一起才能完成计算,分工协作,但可能出现其中某个家伙偷懒或效率低,导致大家都等它,闲着的其它设备这个时 候可以腾出手来干其它活。单cpu在同一时刻只能干一件事情,这没有问题,问题是它并不是7*24*3600都在干活,其它设备也是同样的道理,多线程的目的可以最大限度的提高硬件设备的利用率。

2443

被折叠的 条评论
为什么被折叠?



