我的3个线程接收20M,用了150秒,cpu占用率为5%-15%,平均速率为133kBytes/s,BT速率可轻松上500KBytes/s,我这个socket算不算慢亚,请问怎样提高速率,而cpu占用率又尽可能低捏
解决方案 »
- 在activex中引发事件,是否不能将引发事件函数写在全局函数中?
- 如何将后台的业务逻辑部分改写为COM??
- 对话框的 OnNcLButtonUp 问题
- clistctrl中如何控制列头(head),使用户不能把一列拖成不可见的。
- 在CPropertySheet中怎么改变按钮的背景颜色???
- 串口一次发送1万个双精度数据问题?
- 在单文档结构程序里,在框架类里用timeSetEvent激活的函数,如果调用视图里的某个成员函数???
- 谁知道哪里可以下载win2k server安装程序啊?
- 请教VC宏的制作文件头信息,function信息的注释!!!!!!!!!!
- 求教WinAPI关于消息传递的问题
- 我用ATL做控件,后来想用多线程来做后台处理,请问如何加入多线程啊?
- 很奇怪的问题,有时间来研究一下
你用的是同步,还是异步socket
难道你用的FTP协议吗
------------
这个问题问的怪。
接受数据的速度主要取决于硬件和网络条件,可以提高的是处理数据的速度。
------------
这个问题问的怪。
接受数据的速度主要取决于硬件和网络条件,可以提高的是处理数据的速度。------------------------------------------说得对,但软件的代码也可以提高I/O吞吐量,完成端口就是一例
------------------------------------
iocp并不能提高实际的I/O吞吐量,只是最大限度的发挥I/O的吞吐量。
2. 使用异步模式. 这里的异步是指接收与处理的异步.这样可以尽量避免因为处理时间过长而带来网络IO的效率下降.
3. 使用非阻塞模式SOCKET, 每次不管发还是收一直都要执行到返回WSAEWOULDBLOCK为止, 这样可以最大限度的使用网络IO能力。
4. 减少线程上下文切换和同步锁带来的损失.能够避免用锁的地方尽量别用,或者考虑减少锁的争抢数,或者使用适当的线程调度模式,比如leader/follower.
基本上这是我在实现的过程中所总结出的经验. 另外有一个参考值可以提供给大家在内部局域网做测试的时候对比,那就是通常100M的网络传输文件的速度最快可以达到8.5MB/S左右, 由此可以知道自己的传输性能还有多大的提高空间.