socket的吞吐量问题

    技术2022-05-11  152

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

    最新回复(0)