wget为什么那么快?
- SWX
- 帖子: 181
- 注册时间: 2006-07-30 9:31
wget为什么那么快?
在我看来觉得简直有点不可思议
明明是一个单线程的下载工具,在从ftp或者http上抓东西的时候,大部分的情况下都不比多线程的下载工具要慢
有懂的朋友能讲一下为什么吗?
明明是一个单线程的下载工具,在从ftp或者http上抓东西的时候,大部分的情况下都不比多线程的下载工具要慢
有懂的朋友能讲一下为什么吗?
- shellex
- 帖子: 2180
- 注册时间: 2007-02-18 19:33
- 系统: OSX
- 来自: lyric.im
- 联系:
- shellex
- 帖子: 2180
- 注册时间: 2007-02-18 19:33
- 系统: OSX
- 来自: lyric.im
- 联系:
- yjcong
- 帖子: 2470
- 注册时间: 2006-02-28 3:11
- yaoms
- 帖子: 4952
- 注册时间: 2007-10-19 14:51
- 来自: 深圳
- yjcong
- 帖子: 2470
- 注册时间: 2006-02-28 3:11
- luojie-dune
- 帖子: 22033
- 注册时间: 2007-07-30 18:28
- 系统: Linux
- 来自: 空气中
- foolegg
- 帖子: 249
- 注册时间: 2007-12-01 14:56
Re: wget为什么那么快?
首先,为什么单线程会比多线程慢?SWX 写了:在我看来觉得简直有点不可思议
明明是一个单线程的下载工具,在从ftp或者http上抓东西的时候,大部分的情况下都不比多线程的下载工具要慢
有懂的朋友能讲一下为什么吗?
下载时候,速度受两方面限制,你的下行带宽和服务器的上行带宽(说白了就是你的下载速度和服务器的上传速度)
分情况来看
情况a.下载速度>服务器带宽
比如你的下载速度是100k,服务器则只能提供20k的带宽。于是你用单线程下载,就只有20k的速度
但问题是,一般来说,服务器的最大带宽肯定不止20k,只是服务器端会限制单个访问的带宽(带宽都给一个访问者用了,别人用什么去)。这时多线程下载就可以同时n次访问服务器,获得20k*n的速度,当然,不会大于100k。
情况b.下载速度<=服务器带宽
你的下载速度是100k,而服务器则能提供>100k的带宽,这个时候,你用单线程就能达到100k的极限速度,而多线程同时维护多个访问连接,会把你100k的下载带宽花费在一些没用的地方,反而会比单线程慢。
前几年,情况a比较多见,所以多线程比较牛x,这几年,随着硬件成本降低,国内网络基础设施建设发展,还有p2p的分流,情况b就多了起来,像我是512k的adsl,只有50k的下行带宽,基本上都是情况b
这样就可以理解,为什么wget经常不比多线程慢的原因了
另外还有一个问题,就是服务器比较远的情况,比如国外的服务器,由于包传送中的延迟与丢失,服务器可能提供了很大的带宽,但是到了下载端,就要缩水不少,这时就等于情况a了。不过另一方面,发达国家服务器带宽通常比较大(人家有钱$_$),这方面会有所弥补,比如我在ubuntu.com下iso,用wget就能达到下载速度的极限。
所以现在开太多的线程下载,不仅浪费你的下载带宽,也增加了你的机器和服务器的负荷,完全没有必要。
推荐先用wget下下看,如果能到极限就直接下,不能到极限的话,就做个除法,计算下开几个线程合适再下。
上次由 foolegg 在 2008-08-27 17:44,总共编辑 2 次。
- jarodlau
- 帖子: 501
- 注册时间: 2005-09-06 20:34
- 联系:
Re: wget为什么那么快?
强,解惑了foolegg 写了:
首先,为什么单线程会比多线程慢?
下载时候,速度受两方面限制,你的下行带宽和服务器的上行带宽(说白了就是你的下载速度和服务器的上传速度)
分情况来看
情况a.下载速度>服务器带宽
比如你的下载速度是100k,服务器则只能提供20k的带宽。于是你用单线程下载,就只有20k的速度
但问题是,一般来说,服务器的最大带宽肯定不止20k,只是服务器端会限制单个访问的带宽(带宽都给一个访问者用了,别人用什么去)。这时多线程下载就可以同时n次访问服务器,获得20k*n的速度,当然,不会大于100k。
情况b.下载速度<=服务器带宽
你的下载速度是100k,而服务器则能提供>100k的带宽,这个时候,你用单线程就能达到100k的极限速度,而多线程同时维护多个访问连接,会把你100k的下载带宽花费在一些没用的地方,反而会比单线程慢。
前几年,情况b比较多见,所以多线程比较牛x,这几年,随着硬件成本降低,国内网络基础设施建设发展,还有p2p的分流,情况a就多了起来,像我是512k的adsl,只有50k的下行带宽,基本上都是情况a
这样就可以理解,为什么wget经常不比多线程慢的原因了
另外还有一个问题,就是服务器比较远的情况,比如国外的服务器,由于包传送中的延迟与丢失,服务器可能提供了很大的带宽,但是到了下载端,就要缩水不少,这时就等于情况a了。不过另一方面,发达国家服务器带宽通常比较大(人家有钱$_$),这方面会有所弥补,比如我在ubuntu.com下iso,用wget就能达到下载速度的极限。
所以现在开太多的线程下载,不仅浪费你的下载带宽,也增加了你的机器和服务器的负荷,完全没有必要。
推荐先用wget下下看,如果能到极限就直接下,不能到极限的话,就做个除法,计算下开几个线程合适再下。
- SWX
- 帖子: 181
- 注册时间: 2006-07-30 9:31
Re: wget为什么那么快?
多谢。我觉得wget非常直接,不像其他得下载工具那么拖泥带水……我自己得带宽不大,极限也才150多,所以我估计服务器给得带宽多半是比我得要大得。foolegg 写了:首先,为什么单线程会比多线程慢?SWX 写了:在我看来觉得简直有点不可思议
明明是一个单线程的下载工具,在从ftp或者http上抓东西的时候,大部分的情况下都不比多线程的下载工具要慢
有懂的朋友能讲一下为什么吗?
下载时候,速度受两方面限制,你的下行带宽和服务器的上行带宽(说白了就是你的下载速度和服务器的上传速度)
分情况来看
情况a.下载速度>服务器带宽
比如你的下载速度是100k,服务器则只能提供20k的带宽。于是你用单线程下载,就只有20k的速度
但问题是,一般来说,服务器的最大带宽肯定不止20k,只是服务器端会限制单个访问的带宽(带宽都给一个访问者用了,别人用什么去)。这时多线程下载就可以同时n次访问服务器,获得20k*n的速度,当然,不会大于100k。
情况b.下载速度<=服务器带宽
你的下载速度是100k,而服务器则能提供>100k的带宽,这个时候,你用单线程就能达到100k的极限速度,而多线程同时维护多个访问连接,会把你100k的下载带宽花费在一些没用的地方,反而会比单线程慢。
前几年,情况a比较多见,所以多线程比较牛x,这几年,随着硬件成本降低,国内网络基础设施建设发展,还有p2p的分流,情况b就多了起来,像我是512k的adsl,只有50k的下行带宽,基本上都是情况b
这样就可以理解,为什么wget经常不比多线程慢的原因了
另外还有一个问题,就是服务器比较远的情况,比如国外的服务器,由于包传送中的延迟与丢失,服务器可能提供了很大的带宽,但是到了下载端,就要缩水不少,这时就等于情况a了。不过另一方面,发达国家服务器带宽通常比较大(人家有钱$_$),这方面会有所弥补,比如我在ubuntu.com下iso,用wget就能达到下载速度的极限。
所以现在开太多的线程下载,不仅浪费你的下载带宽,也增加了你的机器和服务器的负荷,完全没有必要。
推荐先用wget下下看,如果能到极限就直接下,不能到极限的话,就做个除法,计算下开几个线程合适再下。