比如挖一个隧道,有2种开工方法
1、只在山的一头挖,直至挖到山的另一头,从而打通隧道,这可以看成是单线程
2、在山的两头挖,同时开工,最后在山的中间接通,从而打通隧道,这感觉肯定比1快了很多,好比多线程
但是2成立的前提是必须有两个工人。而我们的计算机中一般来说只有一个CPU,也就是说只有一个工人。
多线程不过是CPU在不同的时间片之间切换,而表现出齐头并进的样子。
既然挖隧道的人只有一个,虽然我的施工方案是在山的两头开挖,但是由于工作的人只有一个,所以只有让这个人在山的两头跑,挖一会这头再去挖另一头,来回跑是要花费额外时间的(好比线程的切换和调度)。
那么,我们是不是可以说,在单CPU的机器中,多线程反而降低了效率呢?
总之:java多线程编程能否提高程序的效率,很大程度上还取决于你的机器是多cpu还是单cpu,如果同样的多线程应用程序,在多核cpu的机器上跑,要比在单核cpu的机器上跑,效率要高. |