大家认为高效的网络文件传输方式是什么,个人感觉:是不是用文件映射方式实现。是否还有更好的方式?

解决方案 »

  1.   

    如果是传输,对于访问文件的速度就不需要要求太高了,只要访问文件的方式不要效率太低,所需时间是远小于传输时间的。
    一般情况,每次从文件中读取1MB以上的数据,效率就不算低了。
    对于文件映射,其主要作用是略过常规读写文件的中间环节,省去各级函数调用的执行时间,当程序对文件频繁进行读写时,可以提高效率。对于顺序读写文件,只要每次读写的数据量不要太少,中间过程所花的时间是可以忽略不计的。此外,文件映射还可以减少数据从磁盘缓冲到程序缓冲的复制过程,不过与磁盘I/O相比,内存复制所需的时间也是忽略不计的。
      

  2.   

    在操作多个socket中,直接找到目标socket,比如1个服务器有10000个连接,如果每次接收都在sockList遍历寻找对应sock会降低效率。多线程操作多个sokcet操作,确保在某个线程处于等待信号状态(如果有的话),另一个线程可以正常工作。多线程操作多个sokcet操作,如果有多个CPU,合理分配,可以真正做到线程同时运行普通模式下,操作过程是先接收数据到sokcet的缓冲区,再从缓冲区COPY到你的Buf,使用重叠IO,可以接收数据直接到你的buf,省50%的数据复制时间.以上抄书 IOCP的优势
      

  3.   

    用TransmitFile函数发送文件吧,异步的方式处理网络发送,并且读文件的操作交给操作系统,完全避免了调用ReadFile函数的用户态/内核态的来回切换。用p2p本质上还是要读文件发送数据,只不过是多条链路上并发,也受到网络带宽的限制。 实际上点对点传,异步处理的话100M网卡基本满负载传送数据是可以的。