一种提高LoRa基站数据包转发率的方法技术

技术编号:17784928 阅读:191 留言:0更新日期:2018-04-22 16:54
本发明专利技术提出了一种提高LoRa基站数据包转发率的方法,实现步骤如下:1、预先创建n个固定子线程;2、实时读取LoRa数据包,存入环形缓冲区;3、一旦发现缓冲区中有待处理的数据包,从固定子线程组中选取一个空闲子线程,并为其分配一个待处理数据包;若无空闲子线程,则创建一个临时子线程,并为其分配一个待处理数据包;4,固定子线程处理完成数据包后,进入休眠状态;临时子线程处理完成数据包后,立即退出;5,综合考虑步骤2在一段时间内读到数据包个数,动态调整环形数据缓冲区的大小;综合考虑步骤3在一段时间内临时线程创建和销毁的频率,动态调整固定子线程数组的大小,以适应当前使用环境,优化数据包处理策略。

【技术实现步骤摘要】
一种提高LoRa基站数据包转发率的方法
本专利技术涉及一种提高LoRa基站数据包转发率的方法,具体与LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略、以及多线程“一对一”并发处理数据包等有关。
技术介绍
实际生产作业中,LoRa基站承担着大量的LoRa数据包校验、解析、处置的任务。大量的LoRa数据包同时到达基站,可能会导致通道拥堵造成丢包;另外、目前的LoRa基站都是串行方式处理数据包,可能使数据包因为来不及解析而造成应答包时间戳超过阈值,从而被系统判定为丢包。
技术实现思路
本专利技术提供一种提高LoRa基站数据包转发率的方法,实现基于实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包,使数据包能尽快被读取、消化,减少因为通道的拥堵和某个数据包处理阻塞造成其他数据包丢失,减少应答包的时间戳超时而丢包,从而提高LoRa基站的数据包转发率。为了达到专利技术目的,本专利技术采用如下技术方案:一种提高LoRa基站数据包转发率的方法,实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包。所述实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包,系统实时地读取节点发送到基站的LoRa数据包,并存入一个环形的数据包缓冲区中,根据一段时间内的数据量反馈调节环形数据缓冲区的大小,以减少环形缓冲区的数据溢出。一旦系统检测到环形数据缓冲区中存在待处理数据,会从预先创建好的固定线程数组中选取一个空闲的子线程,并把一个待处理的LoRa数据包指定给该固定子线程处理;如果固定子线程数组中的找不到空闲线程,那么创建一个临时子线程,并把一个待处理的LoRa数据包指定给该临时线程处理。固定子线程处理完成数据包之后进入休眠状态,等待下次唤醒;临时子线程处理完成数据之后立即退出,释放资源。系统根据创建临时线程的频率和数量反馈调整固定线程的数量,以减少临时线程的创建和销毁造成的系统资源的消耗。实时地、动态地创建数据包环形缓存,一个数据包只对应一个处理线程,多个数据包快速地、并行地校验、解析、处置。这样可以避免因为通道拥堵或者某个数据包处理的阻塞造成其他数据包的处理延时,从而提高lora基站的数据包转发率。一种提高lora基站数据包转发率的方法,包括以下步骤:步骤一,预先为系统创建n个固定的数据包处理子线程,获取每一个子线程的pid依次存放于固定子线程数组thread_array中;每一数组元素保存线程的ID、线程状态STATE(休眠或运行);固定线程数组数据结构如下:structthread_info{pthread_ttid;//线程idintstate;//线程状态};structthread_info*thread_array;//固定线程组步骤二,实时读取到达基站的LoRa数据包,并立即存入环形LoRa数据包缓冲区lora_packet中。环形数据缓冲区数据结构如下:Structlora_packet_info{intindex;//lora数据包索引void*packet;//数据包指针}Structlora_packet_info*lora_packet;//环形数据包缓冲区指针步骤三,系统实时地监测环形数据缓冲区lora_packet中是否有待处理的LoRa数据包,一旦发现存在待处理的数据包,从固定子线程数组thread_array中选取一个空闲子线程,并向其分配一个待处理数据包;如果固定子线程数组thread_array中找不到空闲子线程,那么创建一个临时子线程,并向其分配一个待处理数据包。步骤四,固定子线程处理完成一个数据包之后,进去休眠状态,等待下次唤醒;临时子线程处理完成一个数据包之后,立即退出,释放资源。步骤五,综合考虑步骤二在一段时间内读到lora数据包个数,动态地调整环形数据缓冲区lora_packet的大小;综合考虑步骤三在一段时间内临时线程创建和销毁的频率,动态地调整固定子线程数组thread_array的大小,以适应当前的数据包数量的变化,优化基站的数据包处理策略。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本专利技术的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1为本专利技术方法的流程框图。具体实施方式为了使本专利技术所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。环形LoRa数据包缓冲区用于实时地、快速地暂存基站接收到LoRa数据包,且该环形的数据包缓冲区的大小会根据当前到达基站的数据包数做动态地调整,减少因为节点数据包拥堵造成数据包丢失;若干个固定子线程用于处理环形缓冲区中的待处理数据包,这类线程在系统中始终存在,且固定线程的数量会随着临时线程创建和销毁的频率做调整,以减少临时线程的频繁创建和销毁造成系统资源的浪费;临时子线程用于缓解因空闲固定子线程数量不足而导致环形数据缓冲区溢出。固定子线程处理完数据包之后进入休眠,等待下一次唤醒;临时子线程处理完数据之后立即退出,释放资源。系统通过实时监测系统待处理数据包的数量和当前空闲的固定子线程数量,决定数据包分配和处理策略。下面为一个LoRa基站和x个节点组成的系统的实施实例:(1)预先为系统创建8x个固定的数据包处理子线程,获取每一个子线程的pid依次存放于固定子线程数组thread_array中,并清空线程状态标志位;每一数组元素保存线程的ID、线程状态STATE(休眠状态为0或运行状态为1)。数据结构:structthread_info{pthread_ttid;intstate;};开辟固定线程数组thread_array:structthread_info*thread_array=malloc(sizeof(structthread_info)*8x)初始化固定线程数组thread_array,index线程索引,tid为所创建的线程id:(thread_arry+index)->tid=tid;//tid为创建的第index个线程id(thread_arry+index)->state=0;//初始状态为空闲状态(2)创建环形实时读取到达基站的LoRa数据包,并立即存入环形LoRa数据包缓冲区lora_packet中。基站读到LoRa节点发送过来的数据包并不马上处理,而是依次存入环形缓冲区,确保lora数据通道始终保持畅通,避免数据包拥堵而丢包。环形数据缓冲区数据结构:Structlora_packet_info{intindex;//lora数据包索引void*packet;//数据包指针}intwr_index=0;//环形缓冲区写索引intrd_index=0;//环形缓冲区读索引开辟环形数据缓冲区:Structlora_packet_info*lora_packet=malloc(sizeof(Structlora_packet_info)*本文档来自技高网...
一种提高LoRa基站数据包转发率的方法

【技术保护点】
一种提高LoRa基站数据包转发发率的方法,其特征在于基站实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包。所述基站实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包,系统实时地读取节点发送到基站的LoRa数据包,并存入一个环形的数据包缓冲区中,根据一段时间内的数据量反馈调节环形数据缓冲区的大小,以减少环形缓冲区的数据溢出。一旦系统检测到环形数据缓冲区中存在待处理数据,会从预先创建好的固定线程数组中选取一个空闲的子线程,并把一个待处理的LoRa数据包指定给该固定子线程处理;如果固定子线程数组中的找不到空闲线程,那么创建一个临时子线程,并把一个待处理的LoRa数据包指定给该临时线程处理。固定子线程处理完成数据包之后进入休眠状态,等待下次唤醒;临时子线程处理完成数据之后立即退出,释放资源。系统根据创建临时线程的频率和数量反馈调整固定线程的数量,以减少临时线程的创建和销毁造成的系统资源的消耗。实时地、动态地创建数据包环形缓存,一个数据包只对应一个处理线程,多个数据包快速地、并行地校验、解析、处置。这样可以避免因为通道拥堵或者某个数据包处理的阻塞造成其他数据包的处理延时,从而提高lora基站的数据包转发率。...

【技术特征摘要】
1.一种提高LoRa基站数据包转发发率的方法,其特征在于基站实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包。所述基站实时地、动态地选择LoRa数据缓存策略、固定线程和临时线程调度策略、反馈调节策略以及多线程“一对一”并发处理数据包,系统实时地读取节点发送到基站的LoRa数据包,并存入一个环形的数据包缓冲区中,根据一段时间内的数据量反馈调节环形数据缓冲区的大小,以减少环形缓冲区的数据溢出。一旦系统检测到环形数据缓冲区中存在待处理数据,会从预先创建好的固定线程数组中选取一个空闲的子线程,并把一个待处理的LoRa数据包指定给该固定子线程处理;如果固定子线程数组中的找不到空闲线程,那么创建一个临时子线程,并把一个待处理的LoRa数据包指定给该临时线程处理。固定子线程处理完成数据包之后进入休眠状态,等待下次唤醒;临时子线程处理完成数据之后立即退出,释放资源。系统根据创建临时线程的频率和数量反馈调整固定线程的数量,以减少临时线程的创建和销毁造成的系统资源的消耗。实时地、动态地创建数据包环形缓存,一个数据包只对...

【专利技术属性】
技术研发人员:唐仕斌彭府吴世川
申请(专利权)人:厦门四信通信科技有限公司
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1