A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 意映 初级黑马   /  2012-7-27 22:26  /  1579 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程下载会提高下载效率吗?

4 个回复

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

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