java socket 性能_java的socket-- 用代码对比tcp和udp性能

本文通过编写Java代码,对比测试了TCP和UDP在不同场景下的性能。测试结果显示,在本地环境下,UDP的速度明显快于TCP,并且多线程对UDP消息发送的提升不明显,因为UDP是无状态的协议,每次发送都会新建协议包。文章还对测试结果进行了分析,指出线程利用和连接创建成本是影响性能的关键因素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端时间学些java的socket编程,学到了tcp和udp协议,众所周知tcp要比udp快,但是快多少呢?周末时间写代码验证一下:

代码就不贴了,最后我把代码上传到csdn上,有兴趣的同学可以看下,自己也算是留个记录

两个主要的测试类:TestUdpAndTcp和TestUdpAndTcpForClient(原来想在一个类(进程)里实现测试,但是测试结果很不理想,最后分析发现我开了100个线程的线程池,有概率会出现100个线程全是客户端或服务端线程,就一直卡死在接收消息上了。。)

6种情况:

/**

* udp和tcp的代码都有了,接下来就是测试tcp和udp的效率了

* 分别用线程池开20个线程,测试三种情况:

* 情况1:1个tcp服务端,10000个客户端分别发送消息

* 情况2:1个tcp服务端,100个客户端发送100次消息

* 情况3:1个tcp服务端,1个tcp客户端发送10000次消息

* 情况4:1个服务端,10000个udp客户端发送1次消息

* 情况5:1个服务端,100个udp客户端发送100次消息

* 情况6:1个服务端,1个udp客户端发送10000次消息

* 每次服务端收到消息之后发送回应

*/

最后的结果:

情况1:382ms

情况2:278ms

情况3:2463ms

情况4:37ms

情况5:38ms

情况6:34ms

结果分析:因为是本地的服务器和本地的客户端,所以几乎不存在网络传输的延迟,可以看到udp确实比tcp快很多(有着数量级上的差距)

情况4,5,6的时间消耗差不多,猜测两个原因: 1. 多线程情况下对udp消息发送提升并不明显,因为服务端没有对数据进行任何处理即返回,所以udp时间消耗可能跟创建线程消耗差不多,如果服务端收到消息后进行逻辑处理或者等待一定时间,那多线程肯定提升就会很明显了;2. udp是无状态的协议,所以每次客户端发送消息都会新建udp的协议包,这种情况下服务端无法做到线程复用(因为对服务端来说,每次链接都是一个新的链接)

情况1是10000个客户端,每个客户端每次发送一条消息,情况2是100个客户端,每个客户端一共发送100条消息,可以把问题简化,假设开线程是没有任何损耗的,100个线程也可以完美进行并发的,情况1可以简化为一个线程开100个客户端,每个客户端每次发送1条消息,情况2简化为1个线程开1个客户端,然后这个客户端发送100条消息,可以看出情况2应该比情况1少了部分客户端创建连接的消耗,所以情况2会比情况1时间消耗少一些,至于情况3,主要是因为多线程完全没有被利用,100个线程全程只有1个线程在工作,所以时间消耗最大。

以上分析只是个人理解,欢迎大神指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值