首页 新闻 搜索 专区 学院

原始套接字发送自己封装的TCP/IP包,加线程后速度也上不去是什么原因

0
[待解决问题]

情况是这样,我需要发送自己构造的数据包,将数据封在TCP包中,然后再封在IP包中,最后再发送出去

现在要尽可能达到最快的发送速度,我的方案是先创建一个字符串数组,用于存放已经构造好的数据包,然后程序运行时先把数据包构造好并保存在数组中,然后在启动发包的线程

我的带宽是1000M,当启动一个线程时,发包速度大约是170M,CPU占用率40%左右,但是加到10个进程时速度也就是190M,cpu 50%---60%,加到50个或更多是速度也就是200M,cpu 60%+,不是线程越多速度应该越快吗,这是为什么,CPU也没有占满啊

如果要使用零拷贝技术应该如何处理,求指点

prisoner的主页 prisoner | 菜鸟二级 | 园豆:206
提问于:2014-06-06 10:02
< >
分享
所有回答(3)
0

依据你的平台,你应该选择性的读一读《UNIX 网络编程》或《Windows 网络编程》。

Launcher | 园豆:45045 (高人七级) | 2014-06-06 10:21

谢谢了

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-06 19:42
0

1000M以太网,有效数据吞吐量300M就不错了,再说1000M网卡号称1000M实际未必跑的了这么高,受很多因素限制,比如网线的质量、电磁环境等。估计你用零拷贝技术效果也好不到哪里去。

USB3.0联机线理论速度5G,可以轻松达到1G以上的有效载荷传输速度。QQ:1561724180

LiuKaiFa | 园豆:1491 (小虾三级) | 2014-06-06 13:01

我只是向网卡投递这些数据包,网卡发送这些数据是与网络环境关系不大的,网卡数据能够发送出去,但是到达目的端的不一定是全部数据,因为像如网线的质量、电磁环境等的因素会导致丢包,所以导致有效吞吐量没有那么大,我现在只是向网卡投递数据并发送,不知道为什么速度上不去

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-06 19:45
0

不是线程越多越快…

磁盘IO,网络IO,CPU负荷,都是要综合考虑的…

Firen | 园豆:5483 (大侠五级) | 2014-06-10 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册