我的3个线程接收20M,用了150秒,cpu占用率为5%-15%,平均速率为133kBytes/s,BT速率可轻松上500KBytes/s,我这个socket算不算慢亚,请问怎样提高速率,而cpu占用率又尽可能低捏

解决方案 »

  1.   

    你的网络环境是什么样的啊, 反正我自己开发的BT传输算法单连接在内部可以达到每秒3.5MB/秒,如果是多个连接下载会更加快. CPU占用大概在 10 ~ 30% 之间吧
      

  2.   

    你的网络环境是什么样的啊, 反正我自己开发的BT传输算法单连接在内部可以达到每秒3.5MB/秒,如果是多个连接下载会更加快. CPU占用大概在 10 ~ 30% 之间吧---------------------------------------------------------------->
    你用的是同步,还是异步socket
    难道你用的FTP协议吗
      

  3.   

    我这个socket算不算慢
    ------------
    这个问题问的怪。
    接受数据的速度主要取决于硬件和网络条件,可以提高的是处理数据的速度。
      

  4.   

    我这个socket算不算慢
    ------------
    这个问题问的怪。
    接受数据的速度主要取决于硬件和网络条件,可以提高的是处理数据的速度。------------------------------------------说得对,但软件的代码也可以提高I/O吞吐量,完成端口就是一例
      

  5.   

    说得对,但软件的代码也可以提高I/O吞吐量,完成端口就是一例
    ------------------------------------
    iocp并不能提高实际的I/O吞吐量,只是最大限度的发挥I/O的吞吐量。
      

  6.   

    想要高速传输并且CPU占用下, 一般都是异步模式的. 总之尽量让你的SOCKET尽量的发与尽量的收. 我的测试结果是在内部网络中测试的, 虽然单连接3.5MB/S还没有达到最高速度, 但是考虑到在公网上的速度瓶颈这已经足够了.  我在优化的过程中,发现这么几个地方对速度影响非常大:1. malloc和memcpy. 尽量减少内存分配操作与内存COPY操作. 在内存节点管理方面尽量考虑到可复用. 减少内存移动和COPY的次数,特别是realloc的使用.
    2. 使用异步模式. 这里的异步是指接收与处理的异步.这样可以尽量避免因为处理时间过长而带来网络IO的效率下降.
    3. 使用非阻塞模式SOCKET, 每次不管发还是收一直都要执行到返回WSAEWOULDBLOCK为止, 这样可以最大限度的使用网络IO能力。
    4. 减少线程上下文切换和同步锁带来的损失.能够避免用锁的地方尽量别用,或者考虑减少锁的争抢数,或者使用适当的线程调度模式,比如leader/follower.
    基本上这是我在实现的过程中所总结出的经验. 另外有一个参考值可以提供给大家在内部局域网做测试的时候对比,那就是通常100M的网络传输文件的速度最快可以达到8.5MB/S左右, 由此可以知道自己的传输性能还有多大的提高空间.
      

  7.   

    100M局域网内,单线程TCP连接速率在7M-9M之间