目前很多多线程ftp下载工具,如FlashGet,NetAnt等,都是通过将一个文件分割为多个同时下载的方式来提高下载速度。
对早期的TCP/IP实现来说,其窗口大小最大只有64k,所以对于高速同时两端之间Round Trip Time大的文件传输来说特别划不来,因为发出64k的文件须时很短,大部分时间用来等ACK了,带宽没有充分利用。在此时用多线程文件传输当然是必要的。但后来有了RFC1323,一次发送的数据可达2的32次方字节,此时已经完全没必要用多线程传输了,因为单线程传输已经足够将带宽充满了。
相信目前所有的TCP/IP实现都支持RFC1323,那为何现在的数据传输还是多线程比单线程快呢?是因为ftp服务器限制了每个连接的速度,所以多线程快吗?但并不是所有的ftp服务器都限制速度啊。更何况很多ftp服务器限了每个连接传输速度后又不关闭多线程连接,甚至还鼓励用户多线程连接,这不等于没限速吗?迷惑ing。
问题1:既然RFC1323允许一次发送的数据可达2的32次方字节,那目前的多线程到底是抢了谁的带宽?如果已不是带宽问题,那么多线程到底是突破了什么瓶颈?
问题2:如果我自己写一个网络文件传输的软件,有没有做多线程的必要?我决不会去限制单个连接的传输速度。

解决方案 »

  1.   

    多线程下载更快时说的是在共享带宽中,在共享带宽时,线程多,连接多就能抢到更多的网络资源。
    TCP/IP协议是基于无连接的IP协议的,为了实现面向连接的协议TCP,就必须传送许多状态和控制信息,对所发送和接收的数据进行确认,这样每开一个连接就会有一定程度网络资源浪费,所以可能反而略有降低
      

  2.   

    回复kingzai,连接多,浪费的是大家共享的带宽,降低了整体的效率,但是对于开了更多连接的机器,还是能损公肥私抢到更多带宽吧。