在Linux上,编写一个每秒接收100万UDP数据包的程序究竟有多难
1个回答
展开全部
UDP接收比TCP接收要简单很多,性能也要高很多
假设你要接受的UDP包都是最大MTU,不大于1500字节一个包,100万个UDP包也就是1.5GBps的流量,这个并不困难,当然首先网口要有足够的带宽。我以前开发的流媒体转发服务,在生产环境下,一台设备上游UDP包可以接收2.7GBps,并同时转发出去。
当然这个和程序运行的设备配置是有关系的,主要是网卡和CPU
给你几个建议:
1:多线程处理,单个线程处理能力还是有限的,同时尽量把线程绑定到CPU核上。
2:linux系统的网络参数要优化,包括读写缓冲区大小
3:如果非必要,可以采用阻塞模式接收,性能比非阻塞要好。
假设你要接受的UDP包都是最大MTU,不大于1500字节一个包,100万个UDP包也就是1.5GBps的流量,这个并不困难,当然首先网口要有足够的带宽。我以前开发的流媒体转发服务,在生产环境下,一台设备上游UDP包可以接收2.7GBps,并同时转发出去。
当然这个和程序运行的设备配置是有关系的,主要是网卡和CPU
给你几个建议:
1:多线程处理,单个线程处理能力还是有限的,同时尽量把线程绑定到CPU核上。
2:linux系统的网络参数要优化,包括读写缓冲区大小
3:如果非必要,可以采用阻塞模式接收,性能比非阻塞要好。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询