当前位置:  技术问答>linux和unix

udp包排序算法,求优化

    来源: 互联网  发布时间:2016-11-26

    本文导语:  由于UDP数据包是无序的,在开发过程中一般要作用排序处理,因此本人设计了以下算法来进行排序: 1.开若干个数据接收线程A,若干个数据预处理线程B,若干个数据处理线程C。 2.数据包包头设计有序列号,并用map m...

由于UDP数据包是无序的,在开发过程中一般要作用排序处理,因此本人设计了以下算法来进行排序:
1.开若干个数据接收线程A,若干个数据预处理线程B,若干个数据处理线程C。
2.数据包包头设计有序列号,并用map mapX来保存某个套接字当前要处理的序列号,其中key是套接字,value是当前要处理的序列号。
3.A接收到数据后,把数据放入预处理队列m,并唤醒B进行处理。
4.B解析数据包包头,取得包的序列号x。
5.如果x=1,或x与mapX中的序列号一致,则把数据包转移到数据处理队列n,并唤醒C进行处理;否则不处理,跳过以下6~8步骤。
6.设置x=x+1,并保存到mapX。
7.查找m中是否有序列号与x相等的数据包,如果有,则把数据包转移到n,并唤醒C进行处理。
8.循环步骤6~7,直至找不到相对应的序列号为止。

目前觉得步骤6~8效率比较低,看看大家有没有更好的算法。

|
遍历的效率是很低的吧,建议把map换成最小堆,这样只用检测堆的根是否是你要处理的包即可

|
无序就无序呗,给每个包添加个报头,报头放上这个包的序号,收到包根据包头排序就可以了啊 

可以建立个位图,如果有1000个包,就建立个1000的位图,收到哪个序号就把哪个位图的数据保存起来

|
重要的是,可以实现

|

你这个查找过程一直循环么,找不到的话(丢包)怎么办

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Qt:UDP:如何划分接收到的UDP包的界限
  • udp包大于1500字节网络传输会分包吗?udp tcp多大的包比较合适?
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • tcp和udp套接字有何不同?在什么情况下用tcp什么情况下用udp????
  • 50求教一个菜鸟级别的UDP套接字问题,关于UDP server端只能接收一次数据的问题?在线等,一直等............
  • udp方式抓取网页
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
  • udp socket客户端和udp服务端程序示例分享
  • 浙ICP备11055608号-3 iis7站长之家
  • 请问下怎么关闭SUSE 9.1下UDP的checksum?
  • 如何判断udp端口可达
  • 关于epoll&udp的问题?
  • UDP包怎么生成啊?用什么函数??简单问题,帮个忙哈
  • 对于socket UDP传输,一个端口只能被一个进程绑定?
  • IP,UDP,TCP的校验和计算
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 基于UDP的数据传输 UDT
  • 服务进程收到的第一个UDP包的远端地址不对?
  • udp问题
  • 关于udp sendto时候端口选定问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3