一种基于多线程的实时数据分析任务分发处理方法与流程

文档序号:11261860阅读:165来源:国知局
一种基于多线程的实时数据分析任务分发处理方法与流程

本发明涉及光纤传感数据处理领域,具体的说,是涉及一种基于多线程的实时数据分析任务分发处理方法。



背景技术:

mz光纤周界入侵监测仪器基于mach-zehnder干涉原理,利用光纤光缆探测外界振动并判别非法入侵,抗电磁干扰强、可实现对周界入侵导致的振动的长距离实时监测及定位。mz光纤周界入侵监测仪器因具有抗电磁干扰、易于远传等优点,可以有效克服电类传感器的不足,近十年得到迅速发展。作为周界安防系统的关键技术,入侵的实时、低漏报率定位是周界监测预警系统的主要研究方向之一。

在实际应用中,mz光纤周界入侵检测仪器的数据采集线程将信号实时采集存放到循环队列缓冲池中,目前对数据的分析过程多采用单线程,这就导致在处理过程中发生的入侵数据将无法实时处理,从而导致入侵数据分析的延迟,实时性差,无法满足系统实时性的需求;同时,数据分析的延迟不断积累,循环队列缓冲池中数据溢出,部分数据丢失,导致入侵漏报率增加。

因此,有必要对上述现有技术进行改进,以满足信息传输的过程中光纤围栏周界入侵实时、低漏报率监控的需求。



技术实现要素:

本发明为了解决上述问题,提出了一种基于多线程的实时数据分析任务分发处理方法,本发明通过采用数据采集线程、数据分发线程及多个数据处理线程之间动态配合的多线程的任务分发处理方法,可根据实际情况动态创建数据处理线程,具有实时性高、漏报率低的优点,有利于提高mz光纤周界入侵监测仪器等周界探测预警系统的整体性能的可靠性。

为了实现上述目的,本发明采用如下技术方案:

一种基于多线程的实时数据分析任务分发处理方法,包括以下步骤:

(1)mz光纤周界入侵监测仪器的数据采集线程实时采集数据,并将采集到的数据存放至用于暂存数据的循环队列数据缓冲池中;

(2)mz光纤周界入侵监测仪器的数据分发线程检测循环队列缓冲池中的未处理数据,并检测是否存在空闲的数据处理线程,若各数据处理线程均处于忙碌状态,则动态创建新的数据处理线程,形成动态配合的多线程的任务分发处理过程,数据分发线程将循环队列缓冲池中的数据以数据任务的形式分发至mz光纤周界入侵监测仪器的空闲的数据处理线程,同时,将该数据处理线程的工作状态置为忙碌;

(3)所述数据处理线程接收到数据分发线程分发的数据任务后,对数据任务进行处理,处理完成后,所述数据处理线程自动将其自身的工作状态置为空闲。

所述步骤(1)中,所述的循环队列缓冲池的起始状态为一个循环的空队列,该循环队列缓冲池中具有表征未处理数据开始的front及表征未处理数据结束的下标rear,且两者的初始值均为0。

所述数据采集线程将采集到的数据存放至循环队列数据缓冲池后,会将表征循环队列数据缓冲池中未处理数据开始位置的下标front顺时针移动,每存放一个数据,front的值加1。

进一步的,所述步骤(2)中,数据分发线程将未处理数据分发至数据处理线程的具体步骤为:

i.检查当前是否存在未处理的数据,并判断循环队列缓冲池中未处理的数据是否满足处理条件;

ii.查询空闲的数据处理线程数量;

iii.数据分发线程对未处理数据进行拷贝,将拷贝好的数据分发到数据处理线程中,每分发完一个未处理数据,将循环队列缓冲池中的rear的下标值加b,数据分发线程的分发速度快于数据采集线程的采集速度,此处,b表示单个数据处理线程一次处理的数据点数。

进一步的,所述数据分发线程检查当前是否存在未处理数据,并判断循环队列缓冲池中未处理的数据是否满足处理条件的具体方法为:判断未处理数据的点数a是否不小于单次数据处理线程的处理点数b,若a<b,则不满足处理条件,数据分发线程继续对循环队列缓冲池进行监控;若a≥b,则满足处理条件,数据分发线程将未处理的数据拷贝并分发至空闲状态的数据处理线程进行处理,若所有的数据处理线程均处于忙碌状态,则创建新的数据处理线程,并将未处理的数据分发至该新创建的数据处理线程中,同时将该数据处理线程的工作状态置为忙碌。其中,未处理数据的点数为rear顺时针到达front所经过的下标个数。

进一步的,所述数据分发线程拷贝未处理数据的具体方法为:以rear为起始位置,将连续b个数据拷贝到新的数据data[k][b]中,拷贝完成后,将表示未处理数据结束位置的rear的下标顺时针移动b个位置,其中,k表示低k个数据处理线程,b表示单个数据处理线程一次处理的数据点数。

进一步的,每个数据处理线程均设有状态标志位,第i个数据处理线程的状态标志位为flag[i],其中,i∈【0,m-1】,m为数据处理线程的总个数;数据所述步骤(2)中,将数据处理线程的工作状态置为忙碌的具体方法为:数据分发线程依次对现有的各个数据处理线程的状态标志位进行检测,若其状态标志位的值为0,则该条数据处理线程处于空闲状态,若其状态标志位的值为1,则该数据处理线程处于忙碌状态,检测顺序自flag[0]开始,直至找到第一个空闲状态的数据处理线程k,并将该第k个数据处理线程的状态标志位flag[k]置为1;如果现有的数据处理线程均处于忙碌状态,则创建新的数据处理线程。

进一步的,所述步骤(3)中,所述数据处理线程将其自身的工作状态置为空闲的具体方法为:将其自身的工作状态标志位flag[k]赋值为0,k的取值范围为【0,m-1】,其中,k表示该数据处理线程为第k个数据处理线程,m为数据处理线程的总个数。

一种应用上述方法的多线程实时数据分析任务分发处理系统,包括mz光纤周界入侵监测仪器的数据采集线程、数据分发线程、数据处理线程以及循环队列缓冲池,其中,所述数据采集线程用于实时采集数据信息,并将采集到的数据信息存储至循环队列缓冲池中,所述数据分发线程将循环队列缓冲池中的数据分发至所述数据处理线程,在现有的数据处理线程均处于忙碌的工作状态下,数据分发线程实时创建新的数据处理线程来处理未处理数据,进而实现数据处理的动态分发、处理过程,所述数据处理线程对数据进行分析处理。

进一步的,所述数据处理线程均具有工作状态标志位,所述数据分发线程根据所述数据处理线程的工作状态标志位的数值判断该数据处理线程是否处于空闲状态。

与现有技术相比,本发明的有益效果为:

本发明通过采用数据采集线程、数据分发线程及多个数据处理线程之间动态配合的多线程的任务分发处理方法,杜绝了以往mz光纤周界入侵监测仪器因单线程数据处理导致的数据分析延迟、缓冲池数据溢出、部分数据丢失,从而导致mz光纤周界入侵监测仪器入侵漏报率增加的问题;

本发明可根据需要自行动态创建数据处理线程,保证实时处理数据分析任务,具有实时性高、漏报率低的优点;有利于提高mz光纤周界入侵监测仪器等周界探测预警系统的整体性能的可靠性。

附图说明

构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的限定。

图1是本发明的算法流程图;

图2是本发明循环队列缓冲池的初始状态示意图;

图3是本发明循环队列缓冲池中具有未处理数据时的示意图。

具体实施方式:

下面结合附图与实施例对本发明作进一步说明。

应该指出,以下详细说明都是示例性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

下述实施例为本申请的一种典型的实施方式,如图1所示,一种基于多线程的实时数据分析任务分发处理的数据处理系统,包括mz光纤周界入侵监测仪器的数据采集线程、数据分发线程、数据处理线程以及循环队列缓冲池,其中,所述数据采集线程用于实时采集数据信息,并将采集到的数据信息存储至循环队列缓冲池中,所述数据分发线程将循环队列缓冲池中的数据分发至所述数据处理线程,数据处理线程对数据进行分析处理,在现有的数据处理线程均处于忙碌的工作状态下,数据分发线程实时创建新的数据处理线程来处理未处理数据,进而实现数据处理的动态分发、处理过程,保证对数据实时处理,有利于杜绝以往mz光纤周界入侵监测仪器因单线程数据处理导致的数据分析延迟、缓冲池数据溢出、部分数据丢失的问题,提高了数据处理的实时性、降低了漏报率。

一种基于多线程的实时数据分析任务分发处理方法,该方法的具体步骤为:

步骤1.mz光纤周界入侵监测仪器的数据采集线程实时采集数据

mz光纤周界入侵监测仪器的数据采集线程以16mb/s的速度实时采集数据,并将采集到的数据存放至用于暂存未处理数据的循环队列缓冲池中;所述的循环队列缓冲池的内存为240mb,一个单精度点为4b,该循环队列缓冲池的初始状态如图2所示,其中,front表示循环队列缓冲池中未处理数据处理开始,rear表示未处理数据处理结束,初始状态时,front和rear均为0,循环队列缓冲池为空白状态,其中,1mb=1024*1024b;

如图3,数据采集线程每采集到一个数据,会将该数据存放到循环队列缓冲池中以front为下标的队列位置上,同时,表示队列开始位置的下标front的值加1。

步骤2.分发线程将数据处理任务分发至数据处理线程

数据分发线程实时监控循环队列缓冲池,并判断循环队列缓冲池中未处理的数据是否满足处理条件,具体的,判断循环队列缓冲池中的数据点数a与单次数据处理线程处理点数b的大小关系,如果,a<b,则不满足处理条件,数据分发线程继续对循环队列缓冲池进行监控;如果a≥b,则满足处理条件,则检测是否有处于空闲状态的数据处理线程,若有处于空闲状态的数据处理线程,数据分发线程将未处理的数据拷贝并分发至空闲状态的数据处理线程进行处理,同时将该数据处理线程的状态标志位置为1,表示该数据处理线程处于忙碌状态;若所有的数据处理线程均处于忙碌状态,则动态创建新的数据处理线程,形成相互之间动态配合的多线程任务分发处理过程,并将未处理的数据分发至该新创建的数据处理线程中,同时将该数据处理线程的状态标志位置为1,表示该数据处理线程处于忙碌状态。其中,未处理数据的个数为rear顺时针到达front所经过的下标个数。

一般的入侵事件持续时间为200ms,即对应点数为0.8m,为减少入侵事件被截断的情况,选取单次数据处理线程的点数为2m,即b为2m,在本实施例中,某一时刻,a的值为3m,a>b,满足数据处理条件,数据分发线程依次检测数据处理线程的工作状态,检测结果为现有的数据处理线程均处于忙碌状态,因此,数据分发线程需要创建1个新的数据处理线程来处理其中2m个未处理数据,并将未处理数据分别拷贝到这个新的数据处理线程中进行数据处理,判断是否为入侵事件,与此同时,将新创建的数据处理线程的状态标志位置1,拷贝完成后,将表示未处理数据结束位置的rear的下标顺时针移动2m个位置,其中,b表示单个数据处理线程一次处理的数据个数。

上述的拷贝过程为:以rear为起始位置,将rear~rear+2m-1的连续2m个点拷贝到新的数据data[k][b]中,拷贝完成后,将表示未处理数据结束位置的rear的下标顺时针移动2m个位置,其中,k表示第k个数据处理线程,b表示单个数据处理线程一次处理的数据点数。

步骤3.数据处理线程进行数据处理

数据处理线程k被创建后,将其自身的工作状态标志位flag[k]赋值为1,处理数据分发线程分发下来的数据处理任务,处理完成后,该数据处理线程将其自身的工作状态标志位flag[k]赋值为0,该数据处理线程挂起,其中,k的取值范围为【0,m-1】,其中,k表示该数据处理线程为第k个数据处理线程,m为数据处理线程的总个数。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1