CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

局域网有必要做多线程传输吗?

楼主pango99(pango)2003-08-03 17:40:29 在 VC/MFC / 网络编程 提问

老板要我写个局域网用的文件传输程序(传输的文件都很大(>4G),且不只一个),他要作成和网络蚂蚁相似的多线程传输,但我认为在局域网内没必要做多线程传输,因为现在的局域网至少也是100M(其实很多都采用千兆网了),实际传输速率最少也有50M吧,可硬盘的传输速率就远低于这个数值了(7200RPM的硬盘好象只有30M-40M),这样硬盘读数据的速度远小于网络的传输速度,瓶颈是在硬盘这端,所以我认为无论是多线程还是单线程,他们的传输速度都是一样的。不知我的想法对不对,所以发了这个帖子,请大家帮我参考下,谢了! 问题点数:0、回复次数:13Top

1 楼afc(afc)回复于 2003-08-03 18:26:00 得分 0

我觉得没有必要,单线程速度足够快了,太多线程可能服务器受不了,CPU时间都花在数据传输上了Top

2 楼mjk()回复于 2003-08-03 19:23:47 得分 0

将文件首先分割,然后用多线程传输Top

3 楼mme(dog)回复于 2003-08-03 20:50:03 得分 0

有没有可能同时传输30M-40M吗?Top

4 楼afc(afc)回复于 2003-08-03 20:54:57 得分 0

看网络环境了,100M的网卡理论传输速度是10M字节左右,因为100M是bps,算成BYTE要除8,还要加上数据包头和校验等冗余的数据Top

5 楼jackyuke(jack)回复于 2003-08-03 20:59:07 得分 0

建议还是用单线程吧,不过老板命令不可违  
  要不你就阳奉阴违Top

6 楼lsw0794(dark_walker)回复于 2003-08-03 21:00:05 得分 0

我们公司内部用的一个局域网传送软件,名字叫IPMSG,传送文件的数度很快,在win2000下有2-3M/S,不知道这个软件是多线程还是采用单线程实现的,到底什么时候适合用多线程处理数据呢?   有没有一个比较合理的标准?  
  Top

7 楼Congy(少侠)回复于 2003-08-04 01:10:32 得分 0

我认为有必要,如果多个人之间互发文件,这是你就需要用多线程来完成了  
  Top

8 楼Congy(少侠)回复于 2003-08-04 01:12:05 得分 0

还有楼上说的那个ipmsg,消息通讯格式非常简单,而且还是用udp,我前几天作了一个小东西,就是模拟ipmsg发送信息的。Top

9 楼pango99(pango)回复于 2003-08-04 17:34:42 得分 0

SORRY,我把硬盘和网络的传输单位搞错了,但是100M局域网已经很少采用了,我的软件的运行环境还是在千兆网,所以还是可以认为网络速率大于硬盘速率。还有我想知道的是采用多线程传输是否比单线程来的快,而不是多个人之间互发文件的问题。  
  Top

10 楼mme(dog)回复于 2003-08-04 19:18:10 得分 0

其实我想知道,体统有没有同时发送几十M的能力啊?  
   
  就算有,我想整个系统除了发送信息之外,应该都动不了啦.  
   
  因为你见过这样大发送量的软件吗?  
   
  多线程传输比单线程要快,我是这样认为的:  
   
  因为我发现,发送的每个包的大小是有限制的.你不可能说一下子把几十M的东西发送出去  
   
  缓冲区都没有那么大.而且,我试验发现,从我的局域网发送到外面的网络.每个包发送30000(3  
   
  万)字节,结果收包的那边很成问题.掉包的情况非常严重.根本实现不了满意的通讯.可是在局  
   
  域网里面,掉包却不是那么严重.TCP和UDP我都试过.结果一样.  
   
  所以,采用多线程就可以做到比单线程来的快.因为每次发送的包很小,可是每次却能发送多  
   
  个包.问题是,你怎样组包就是个问题了.处理的不好,说不定发生线程死锁.呵呵,那你就惨啰Top

11 楼alamb(把握今生)回复于 2003-08-04 19:27:02 得分 0

用多线程发送的话,可以把发送数据的时间与读硬盘的时间重叠起来,当然可以做到更快,但是也不是越多线程越好了。如果你的软件还要对数据进行预处理,那就更需要多线程了。不管网络有多快,IO上花的时间总是比CPU处理时间要长得多。Top

12 楼icelight(给我一个接口,我能驱动地球……………仪)回复于 2003-08-05 11:00:39 得分 0

同alamb(把握今生)   的"时间重叠"论。  
   
  另外,有阻塞的情况下用多线程才能显著提高效率,楼主情况显然不属这一种。Top

13 楼kinogre(小熊)回复于 2003-08-05 22:31:48 得分 0

我想多线程传输可能有这样一个好处.  
  首先更正一下,这里所谓"单线程"或"多线程"传输并不真是指线程数,而是指对一个文件的传输所使用的SOCKET的个数,严格说来应该是单连接或多连接传输.  
  WINSOCK在实现的时候为每一个SOCKET都分配了一段定长缓冲区(视不同协议家族及类型,缓冲区长度会有所不同).在使用SOCKET发送数据的时候常常会出现缓冲区满,发送阻塞的错误(用WSAGetLastError()得到的错误码为WSAEWOULDBLOCK).采用多连接分段传输,可以看作是增大了传输时所使用的缓冲区的长度,对于传输大型文件的操作,这也许会提高传输速率吧.  
  或者从整个系统的角度来考虑,WINDOWS在同一时刻可能(常常就是这样)会有多个网络应用需要请求网卡资源,使用多个SOCKET则我们传输文件的程序获得网络资源的可能性就提高了(如果windows是以SOCKET而不是以进程为单位分配网络资源的话,或者如果WINDOWS以线程为单位平均分配网络资源,则采用多线程便能够占到便宜了).Top

相关问题

  • 局域网传输文件
  • 局域网文件传输
  • 多线程查找局域网文件的问题
  • 通过多线程扫描局域网内的所有机器怎么实现?
  • 通过多线程扫描局域网内的所有机器怎么实现?
  • VB.NET中如何使用多线程扫描局域网中的计算机???????
  • socket多线程传输文件 急用!
  • 局域网里文件传输问题!
  • winsock实现局域网文件传输!
  • 局域网内,点对点传输,如何传输文件夹?

关键词

  • 多线程
  • 局域网
  • 硬盘
  • 文件
  • 数据
  • 软件
  • 连接
  • 网络
  • 传输
  • 单线程

得分解答快速导航

  • 帖主:pango99

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo