黑马程序员技术交流社区

标题: 下载效率问题 [打印本页]

作者: 意映    时间: 2012-7-27 22:26
标题: 下载效率问题
多线程下载会提高下载效率吗?
作者: 朱烈葵    时间: 2012-7-27 22:37
理论是会的
作者: 乐峰    时间: 2012-7-27 22:39
比如挖一个隧道,有2种开工方法
1、只在山的一头挖,直至挖到山的另一头,从而打通隧道,这可以看成是单线程
2、在山的两头挖,同时开工,最后在山的中间接通,从而打通隧道,这感觉肯定比1快了很多,好比多线程
但是2成立的前提是必须有两个工人。而我们的计算机中一般来说只有一个CPU,也就是说只有一个工人。
多线程不过是CPU在不同的时间片之间切换,而表现出齐头并进的样子。
既然挖隧道的人只有一个,虽然我的施工方案是在山的两头开挖,但是由于工作的人只有一个,所以只有让这个人在山的两头跑,挖一会这头再去挖另一头,来回跑是要花费额外时间的(好比线程的切换和调度)。
那么,我们是不是可以说,在单CPU的机器中,多线程反而降低了效率呢?
总之:java多线程编程能否提高程序的效率,很大程度上还取决于你的机器是多cpu还是单cpu,如果同样的多线程应用程序,在多核cpu的机器上跑,要比在单核cpu的机器上跑,效率要高.
作者: 刘同超    时间: 2012-7-27 22:42
1.多线程是否可以提高程序运行效率。答案是否定的。
  例如,一个人在一个桌子上做馒头,当你让他在三个桌子上做馒头。你觉得效率提高了吗?
  线程也是,CUP运行这个进程的时候,你让它一会运行这个线程,一会运行哪个线程。你觉得效率会高吗?

2.多线程下载会不会提高效率。 答案也是否定的。
  计算机的下载速度不会快,而是抢了服务器的带宽。
  例如一个服务器同时可以为一百人服务,而你的软件内部开了10个线程在下载,服务器会以为是十个人在下载,会给你提供十个人的服务。但是下载速度不会增加。
  只会抢了服务器的带宽。给服务器增加负担。
作者: 李菁    时间: 2012-7-28 00:00
cpu没有密集型的计算,所以大部分时间cpu都是处于等待中,多线程就可以利用这些空闲的资源。
多线程用于阻塞并发,如果单核cpu跑满时,开多少个线程都无法提高效率。相反会因线程切换的原因,使效率下降。
在有阻塞机制的情况下,使用多线程才会提高效率




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2