发明内容
本申请解决的技术问题是:针对现有技术中基带数据处理效率较低的问题,本申请提供了一种基于消息队列的多线程遥感卫星基带数据处理方法及装置,本申请实施例所提供的方案中,基于消息队列的多线程技术,将大规模的基带数据处理过程划分为多个逻辑线程,并按照多个逻辑线程并行处理模式对基带数据进行高速并行线程之间的数据同信和线程同步,进而提高基带数据处理的效率。
第一方面,本申请实施例提供一种基于消息队列的多线程遥感卫星基带数据处理方法,该方法包括:
构建遥感卫星基带数据处理的生产者消费者描述模型,并根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程;
确定预设的配置文件参数以及初始化消息池参数,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列;
基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,以及将处理后的数据添加到所述环形消息队列中。
本申请实施例所提供的方案中,通过构建遥感卫星基带数据处理的生产者消费者描述模型,并根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程,然后确定预设的配置文件参数以及初始化消息池参数,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列,再基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,以及将处理后的数据添加到所述环形消息队列中。因此,本申请实施例所提供的方案中,基于消息队列的多线程技术,将大规模的基带数据处理过程划分为多个逻辑线程,并按照多个逻辑线程并行处理模式对基带数据进行高速并行线程之间的数据同信和线程同步,进而提高基带数据处理的效率。
可选地,根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程,包括:
根据所述生产者消费者描述模型将基带数据处理划分为基带数据读取线程、帧同步处理线程以及同步后数据的写&统计线程,其中,所述基带数据读取线程为所述帧同步处理线程的生产者,所述帧同步处理线程既为所述基带数据读取线程的消费者,又为所述写&统计线程的生产者。
本申请实施例所提供的方案中,通过并行处理的线程通过边界缓冲区的消息队列进行数据读写和帧同步处理的同步,这样生产和消费线程之间的时间只取决于数据帧同步处理时间,这样可以做到边读边处理边写,比串行的读、处理、写这样的模式,大幅度提高了数据处理的时效性。
可选地,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列,包括:
根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程分别确定所述基带数据读取线程、所述帧同步处理线程以及所述写&统计线程的格式以及输入输出参数;
初始化所述输入输出参数,根据初始化后的输入输出参数以及所述格式构建得到所述环形消息队列。
可选地,所述基带数据读取线程的格式为(基带数据路径,“读线程输出消息队列”,“消息池”),其中,所述基带数据路径为输入参数,所述读线程输出消息队列以及所述消息池为输出参数;
所述帧同步处理线程的格式为(配置文件,“读线程输出消息队列”,“帧同步输出消息队列”),其中,所述配置文件以及所述读线程输出消息队列为输出参数,所述帧同步输出消息队列为输出参数;
所述写&统计线程的格式为(配置文件,“帧同步输出消息队列”),其中,所述配置文件为输入参数,所述帧同步输出消息队列为输出参数。
可选地,基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,包括:
控制所述基带数据读取线程从所述消息池中获取帧消息,将所述帧消息添加到所述读线程输出消息队列中,并判断所述读线程输出消息队列是否已满;
若读线程输出消息队列未满,则所述基带数据读取线程继续从所述消息池中获取帧消息,并生成第一通知信息;
根据所述第一通知信息控制所述帧同步处理线程启动读取所述读线程输出消息队列中的帧消息,并对所述帧消息进行帧同步处理,以及在帧同步处理过程中生成第二通知消息;
根据所述第二通知消息控制所述写&统计线程将所述帧同步输出消息队列中帧消息添加到所述消息池,以及通知所述帧同步线程非满。
可选地,控制所述基带数据读取线程从所述消息池中获取帧消息,将所述帧消息添加到所述读线程输出消息队列中,包括:
控制打开基带数据文件,通过获取数据消息组件从所述消息池中获取帧消息,并根据所述初始化消息池参数将基带数据读取到帧消息的缓存中;
将所述帧消息添加到所述读线程输出消息队列的末尾,并判断所述读线程输出消息队列是否已满;
若未满,则继续从所述消息池中获取帧消息,并将帧消息添加到所述读线程输出消息队列的末尾,并向所述帧同步线程发送第一通知消息;
当所述基带数据文件中数据全部读取完成时,将当前获取的帧消息添加到所述消息池,以及通过获取控制消息组件获取一个第一控制消息,并将所述第一控制消息添加到所述读线程输出消息队列的末尾,其中,所述第一控制消息用于标识基带数据读取完成。
可选地,根据所述第一通知信息控制所述帧同步处理线程启动读取所述读线程输出消息队列中的帧消息,并对所述帧消息进行帧同步处理,包括:
初始化帧同步参数,并根据所述配置文件设置基带数据交织状态以及帧同步缓存的大小,确定所述交织状态对应的待搜索同步字查找表;
创建读取帧消息流的对象,以及对所述对象进行初始化处理,其中,所述对象用于读取所述读线程输出消息队列中的帧消息;
通过所述对象读取所述读线程输出消息队列中的帧消息,判断所述读线程输出消息队列是否为空;
若不为空,则弹出所述读线程输出消息队列中第一个帧消息并加锁保护,将所述第一个帧消息添加到所述对象对应的帧消息队列中,并将所述读线程输出消息队列中第一个帧消息删除,以及通知所述基带数据读取线程非满,以使得所述基带数据读取线程继续从所述消息池中读取帧消息;
判断所述帧消息的类型是否为数据消息;
若是,则将所述帧消息缓存到所述帧同步缓存中,直到所述帧同步缓存填满为止;
当处于搜索状态时,根据所述待搜索同步字查找表在所述帧同步缓存中进行同步字搜索,根据所述配置文件中的预设阈值判断搜索出的同步字是否为有效同步字;
若是有效同步字,则从所述帧同步缓存中获取帧消息,对所述帧消息进行滑帧校正和极性校正,对校正通过的帧消息的帧头信息和数据进行格式化封装,得到封装后的帧消息;
将所述封装后的帧消息添加到所述帧同步输出消息队列中,并通知所述写&统计线程非空;
当所有数据帧同步完成后,在所述帧同步输出消息队列的末尾添加一个第二控制消息,其中,所述第二控制消息用于标识基带数据帧同步完成。
可选地,根据所述第二通知消息控制所述写&统计线程将所述帧同步输出消息队列中帧消息添加到所述消息池,包括:
创建文件指针,根据所述文件指针读取所述帧同步输出消息队列中帧消息;
当所述帧同步输出消息队列为非空时,弹出所述帧同步输出消息队列中第一个帧消息,同时通知所述帧同步线程非满,以使得所述帧同步线程继续进行帧同步处理;
将所述帧消息添加到所述消息池以及对基带数据进行误码率统计,直到读取到所述第二控制消息为止,关闭所述文件指针。
可选地,对基带数据进行误码率统计,包括:
根据所述配置文件判断基带数据是否交织;
若是,则通过帧解交织组件将所述基带数据进行解交织,得到并保存解交织后的基带数据;
通过AOS虚拟信道计数解析组件、AOS虚拟信道标识解析组件、AOS虚拟信道有效长度解析组件将虚拟信道中任一路基带数据分离并写到输出文件中,根据所述输出文件进行误码率统计。
第二方面,本申请实施例提供了一种基于消息队列的多线程遥感卫星基带数据处理装置,该装置包括:
构建单元,用于构建遥感卫星基带数据处理的生产者消费者描述模型,并根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程;
确定单元,用于确定预设的配置文件参数以及初始化消息池参数,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列;
处理单元,用于基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,以及将处理后的数据添加到所述环形消息队列中。
可选地,所述构建单元,具体用于:
根据所述生产者消费者描述模型将基带数据处理划分为基带数据读取线程、帧同步处理线程以及同步后数据的写&统计线程,其中,所述基带数据读取线程为所述帧同步处理线程的生产者,所述帧同步处理线程既为所述基带数据读取线程的消费者,又为所述写&统计线程的生产者。
可选地,所述确定单元,具体用于:
根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程分别确定所述基带数据读取线程、所述帧同步处理线程以及所述写&统计线程的格式以及输入输出参数;
初始化所述输入输出参数,根据初始化后的输入输出参数以及所述格式构建得到所述环形消息队列。
可选地,所述基带数据读取线程的格式为(基带数据路径,“读线程输出消息队列”,“消息池”),其中,所述基带数据路径为输入参数,所述读线程输出消息队列以及所述消息池为输出参数;
所述帧同步处理线程的格式为(配置文件,“读线程输出消息队列”,“帧同步输出消息队列”),其中,所述配置文件以及所述读线程输出消息队列为输出参数,所述帧同步输出消息队列为输出参数;
所述写&统计线程的格式为(配置文件,“帧同步输出消息队列”),其中,所述配置文件为输入参数,所述帧同步输出消息队列为输出参数。
可选地,所述处理单元,具体用于:
控制所述基带数据读取线程从所述消息池中获取帧消息,将所述帧消息添加到所述读线程输出消息队列中,并判断所述读线程输出消息队列是否已满;
若读线程输出消息队列未满,则所述基带数据读取线程继续从所述消息池中获取帧消息,并生成第一通知信息;
根据所述第一通知信息控制所述帧同步处理线程启动读取所述读线程输出消息队列中的帧消息,并对所述帧消息进行帧同步处理,以及在帧同步处理过程中生成第二通知消息;
根据所述第二通知消息控制所述写&统计线程将所述帧同步输出消息队列中帧消息添加到所述消息池,以及通知所述帧同步线程非满。
可选地,所述处理单元,具体用于:
控制打开基带数据文件,通过获取数据消息组件从所述消息池中获取帧消息,并根据所述初始化消息池参数将基带数据读取到帧消息的缓存中;
将所述帧消息添加到所述读线程输出消息队列的末尾,并判断所述读线程输出消息队列是否已满;
若未满,则继续从所述消息池中获取帧消息,并将帧消息添加到所述读线程输出消息队列的末尾,并向所述帧同步线程发送第一通知消息;
当所述基带数据文件中数据全部读取完成时,将当前获取的帧消息添加到所述消息池,以及通过获取控制消息组件获取一个第一控制消息,并将所述第一控制消息添加到所述读线程输出消息队列的末尾,其中,所述第一控制消息用于标识基带数据读取完成。
可选地,所述处理单元,具体用于:
初始化帧同步参数,并根据所述配置文件设置基带数据交织状态以及帧同步缓存的大小,确定所述交织状态对应的待搜索同步字查找表;
创建读取帧消息流的对象,以及对所述对象进行初始化处理,其中,所述对象用于读取所述读线程输出消息队列中的帧消息;
通过所述对象读取所述读线程输出消息队列中的帧消息,判断所述读线程输出消息队列是否为空;
若不为空,则弹出所述读线程输出消息队列中第一个帧消息并加锁保护,将所述第一个帧消息添加到所述对象对应的帧消息队列中,并将所述读线程输出消息队列中第一个帧消息删除,以及通知所述基带数据读取线程非满,以使得所述基带数据读取线程继续从所述消息池中读取帧消息;
判断所述帧消息的类型是否为数据消息;
若是,则将所述帧消息缓存到所述帧同步缓存中,直到所述帧同步缓存填满为止;
当处于搜索状态时,根据所述待搜索同步字查找表在所述帧同步缓存中进行同步字搜索,根据所述配置文件中的预设阈值判断搜索出的同步字是否为有效同步字;
若是有效同步字,则从所述帧同步缓存中获取帧消息,对所述帧消息进行滑帧校正和极性校正,对校正通过的帧消息的帧头信息和数据进行格式化封装,得到封装后的帧消息;
将所述封装后的帧消息添加到所述帧同步输出消息队列中,并通知所述写&统计线程非空;
当所有数据帧同步完成后,在所述帧同步输出消息队列的末尾添加一个第二控制消息,其中,所述第二控制消息用于标识基带数据帧同步完成。
可选地,所述处理单元,具体用于:
创建文件指针,根据所述文件指针读取所述帧同步输出消息队列中帧消息;
当所述帧同步输出消息队列为非空时,弹出所述帧同步输出消息队列中第一个帧消息,同时通知所述帧同步线程非满,以使得所述帧同步线程继续进行帧同步处理;
将所述帧消息添加到所述消息池以及对基带数据进行误码率统计,直到读取到所述第二控制消息为止,关闭所述文件指针。
可选地,所述处理单元,具体用于:
根据所述配置文件判断基带数据是否交织;
若是,则通过帧解交织组件将所述基带数据进行解交织,得到并保存解交织后的基带数据;
通过AOS虚拟信道计数解析组件、AOS虚拟信道标识解析组件、AOS虚拟信道有效长度解析组件将虚拟信道中任一路基带数据分离并写到输出文件中,根据所述输出文件进行误码率统计。
具体实施方式
本申请实施例提供的方案中,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
以下结合说明书附图对本申请实施例所提供的一种基于消息队列的多线程遥感卫星基带数据处理方法做进一步详细的说明,该方法具体实现方式可以包括以下步骤(方法流程如图1所示):
步骤101,构建遥感卫星基带数据处理的生产者消费者描述模型,并根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程。
在本申请实施例所提供的方案中,计算设备按照业务逻辑可将基带数据处理过程划分为多个逻辑线程。具体的,计算设备根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程的方式有多种,下面以一种较佳的方式为例进行说明。
在一种可能实现的方式中,根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程,包括:根据所述生产者消费者描述模型将基带数据处理划分为基带数据读取线程、帧同步处理线程以及同步后数据的写&统计线程,其中,所述基带数据读取线程为所述帧同步处理线程的生产者,所述帧同步处理线程既为所述基带数据读取线程的消费者,又为所述写&统计线程的生产者。
应理解,在本申请实施例所提供的方案中,计算机设备可以是服务器、电脑或者终端设备等,在此并不做限定,只要具有数据控制以及处理能力的设备均适用于本申请。
步骤102,确定预设的配置文件参数以及初始化消息池参数,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列。
在本申请实施例所提供的方案中,计算机设备将基带数据处理划分为多个逻辑线程之后,计算机设备根据运行管理系统的调度,对配置文件进行解析,进而确定出配置文件中的参数,然后对消息池中参数进行初始化设置,然后,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列。具体的,构建环形消息队列的方式有多种,下面以一种较佳的方式为例进行说明。
为了提高数据处理的时效性,在一种可能实现的方式中,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列,包括:根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程分别确定所述基带数据读取线程、所述帧同步处理线程以及所述写&统计线程的格式以及输入输出参数;初始化所述输入输出参数,根据初始化后的输入输出参数以及所述格式构建得到所述环形消息队列。
进一步,在一种可能实现的方式中,所述基带数据读取线程的格式为(基带数据路径,“读线程输出消息队列”,“消息池”),其中,所述基带数据路径为输入参数,所述读线程输出消息队列以及所述消息池为输出参数;所述帧同步处理线程的格式为(配置文件,“读线程输出消息队列”,“帧同步输出消息队列”),其中,所述配置文件以及所述读线程输出消息队列为输出参数,所述帧同步输出消息队列为输出参数;所述写&统计线程的格式为(配置文件,“帧同步输出消息队列”),其中,所述配置文件为输入参数,所述帧同步输出消息队列为输出参数。
本申请实施例所提供的方案中,通过并行处理的线程通过边界缓冲区的消息队列进行数据读写和帧同步处理的同步,这样生产和消费线程之间的时间只取决于数据帧同步处理时间,这样可以做到边读边处理边写,比串行的读、处理、写这样的模式,大幅度提高了数据处理的时效性。
具体的,在本申请实施例所提供的方案中,参见图2,本申请实施例提供了一种环形消息队列的结构示意图。在图2中,环形消息队列包括环形缓冲区对象、缓冲区大小、互斥锁、非空条件变量以及非满条件变量等消息。
步骤103,基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,以及将处理后的数据添加到所述环形消息队列中。
在本申请实施例所提供的方案中,计算机设备在构建环形消息队列之后,需要基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理。具体的,基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理的方式有多种,下面以一种较佳的方式为例进行说明。
在一种可能实现的方式中,基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,包括:控制所述基带数据读取线程从所述消息池中获取帧消息,将所述帧消息添加到所述读线程输出消息队列中,并判断所述读线程输出消息队列是否已满;若读线程输出消息队列未满,则所述基带数据读取线程继续从所述消息池中获取帧消息,并生成第一通知信息;根据所述第一通知信息控制所述帧同步处理线程启动读取所述读线程输出消息队列中的帧消息,并对所述帧消息进行帧同步处理,以及在帧同步处理过程中生成第二通知消息;根据所述第二通知消息控制所述写&统计线程将所述帧同步输出消息队列中帧消息添加到所述消息池,以及通知所述帧同步线程非满。
具体的,参见图3,本申请实施例提供了一种帧消息结构的示意图。在图3所示的结构中,帧消息结构用于定义消息类型(数据消息或控制消息)、数据缓存、数据指针等信息。
进一步,在本申请实施例所提供的方案中,控制所述多个逻辑线程对遥感卫星基带数据进行并行处理包括控制基带数据读取线程对遥感卫星基带数据进行读取处理,控制帧同步处理线程对基带数据读取线程读取的基带数据进行帧同步处理,以及控制同步后数据的写&统计线程对同步后的基带数据进行写以及统计处理三个步骤。为了便于理解下面对上述三个步骤的过程进行说明。
一、对于基带数据读取线程
在一种可能的实现方式中,控制所述基带数据读取线程从所述消息池中获取帧消息,将所述帧消息添加到所述读线程输出消息队列中,包括:控制打开基带数据文件,通过获取数据消息组件从所述消息池中获取帧消息,并根据所述初始化消息池参数将基带数据读取到帧消息的缓存中;将所述帧消息添加到所述读线程输出消息队列的末尾,并判断所述读线程输出消息队列是否已满;若未满,则继续从所述消息池中获取帧消息,并将帧消息添加到所述读线程输出消息队列的末尾,并向所述帧同步线程发送第一通知消息;当所述基带数据文件中数据全部读取完成时,将当前获取的帧消息添加到所述消息池,以及通过获取控制消息组件获取一个第一控制消息,并将所述第一控制消息添加到所述读线程输出消息队列的末尾,其中,所述第一控制消息用于标识基带数据读取完成。
为了便于理解下面基带数据读取线程的工作过程进行简要介绍,参见图4,基带数据读取线程的工作过程具体步骤如下:
步骤41、打开基带数据文件。
步骤42、获取数据消息。
具体的,在本申请实施例所提供的方案中,在获取数据消息之前,先申请消息池数据保护自旋锁,然后判断消息池是否为空;若消息池不为空,则获取数据消息组件从消息池末尾获取帧消息,并删除消息池末尾帧消息;若消息池为空,则在消息池的末尾添加帧消息;然后释放消息池自旋锁。
进一步,根据所述消息池初始化参数将基带数据读取到帧消息的缓存中,当从所述帧消息的缓存中读取帧消息时,对读取的帧消息进行加锁处理。
步骤43、读取数据消息,将数据消息添加到读线程输出消息队列末尾。
具体的,在本申请实施例所提供的方案中,读线程输出消息队列长度已预先设置。当将读取的帧消息添加到读线程输出消息队列的末尾时,首先申请互斥锁,然后判断当前读线程输出消息队列的长度是否等于预设长度;若等于,则确定读线程输出消息队列已满;否则,确定读线程输出消息队列未满。当读线程输出消息队列未满时,将读取的帧消息添加到读线程输出消息队列末尾,并通知帧同步线程,读线程输出消息队列非空;当读线程输出消息队列已满,则等待。
步骤44、当全部帧消息读取完成后,则读取数据结束,将当前获取的帧消息添加到环形队列加入到消息池中,而不添加到环形队列。
具体的,首先申请数据保护自旋锁,然后将帧消息添加到消息池的末尾,然后释放自旋锁。
步骤45、通过获取控制消息组件获取一个第一控制消息,并将第一控制消息添加到读线程数据消息队列的末尾。
在本申请实施例所提供的方案中,获取第一控制消息的方式有多种,为了便于理解下面对获取控制消息的过程进行简要介绍。
具体的,首先申请控制消息保护自旋锁,然后判断消息池是否为空;若消息池不为空,则取得消息池尾部消息;若消息池为空则添加新消息到消息池尾部;然后释放控制消息保护自旋锁。
步骤46、关闭文件。
二、对于帧同步处理线程
在一种可能实现的方式中,根据所述第一通知信息控制所述帧同步处理线程启动读取所述读线程输出消息队列中的帧消息,并对所述帧消息进行帧同步处理,包括:初始化帧同步参数,并根据所述配置文件设置基带数据交织状态以及帧同步缓存的大小,确定所述交织状态对应的待搜索同步字查找表;创建读取帧消息流的对象,以及对所述对象进行初始化处理,其中,所述对象用于读取所述读线程输出消息队列中的帧消息;通过所述对象读取所述读线程输出消息队列中的帧消息,判断所述读线程输出消息队列是否为空;若不为空,则弹出所述读线程输出消息队列中第一个帧消息并加锁保护,将所述第一个帧消息添加到所述对象对应的帧消息队列中,并将所述读线程输出消息队列中第一个帧消息删除,以及通知所述基带数据读取线程非满,以使得所述基带数据读取线程继续从所述消息池中读取帧消息;判断所述帧消息的类型是否为数据消息;若是,则将所述帧消息缓存到所述帧同步缓存中,直到所述帧同步缓存填满为止;当处于搜索状态时,根据所述待搜索同步字查找表在所述帧同步缓存中进行同步字搜索,根据所述配置文件中的预设阈值判断搜索出的同步字是否为有效同步字;若是有效同步字,则从所述帧同步缓存中获取帧消息,对所述帧消息进行滑帧校正和极性校正,对校正通过的帧消息的帧头信息和数据进行格式化封装,得到封装后的帧消息;将所述封装后的帧消息添加到所述帧同步输出消息队列中,并通知所述写&统计线程非空;当所有数据帧同步完成后,在所述帧同步输出消息队列的末尾添加一个第二控制消息,其中,所述第二控制消息用于标识基带数据帧同步完成。
为了便于理解下面帧同步线程的工作过程进行简要介绍,参见图5,帧同步线程的工作过程具体步骤如下:
步骤51、帧同步参数初始化。
步骤52、创建度帧消息队列对象。
步骤53、通过所述对象读取所述读线程输出消息队列中的帧消息,从读线程输出消息队列弹出第一个帧消息。
为了理解下面对弹出第一个帧消息的过程进行简要介绍。
具体的,首先申请获取互斥锁,然后判断读线程输出消息队列是否为空;若为空,则基带数据读线程等待;若不为空,则获取读线程输出消息队列中第一个帧消息;然后在读线程输出消息队列中删除第一个帧消息,同时通知基带数据读线程读线程输出消息队列非满。
步骤54、读取帧消息。
具体的,首先拷贝帧消息缓存中的数据,然后将读取的帧消息添加到消息池中,然后在环形缓冲区读线程输出消息队列弹出下一个消息;其中,将读取的帧消息添加到消息池包括申请自旋锁,将帧消息添加到消息池末尾以及释放自旋锁。
步骤55、搜索同步字、锁定同步字以及验证同步字。
在本申请实施例所提供的方案中,验证同步字包括判断同步字是否为有效同步字。
步骤56、跳到下一帧,获取数据消息。
具体的,搜索到同步字之后,进入验证状态,验证的同步字错误bit数小于配置文件阈值并且验证次数大于配置文件设置最低次数时,则进入锁定状态,并将通过验证的帧信息记录到帧头信息容器里面,然后跳到下一帧。
获取数据消息包括:申请数据自旋锁,判断消息队列是否为空;若不为空,则取消息队列末尾消息,并删除消息队列末尾消息;若为空,则添加新消息到消息队列末尾;释放自旋锁。
步骤57、对有效同步字帧消息进行滑帧校正、极性校正以及帧格式化封装。
步骤58、将封装后的帧消息添加到帧同步输出消息队列。
具体的,首先申请互斥锁,然后判断帧同步输出消息队列是否已满,若帧同步输出消息队列已满,则帧同步线程等待;若帧同步输出消息队列未满,则将封装后的帧消息添加到帧同步输出消息队列的末尾,同时通知写&统计线程。
步骤59、当所有数据帧同步完成后,在所述帧同步输出消息队列的末尾添加一个第二控制消息。
具体的,首先申请自旋锁,然后判断帧同步输出消息队列是否为空;若帧同步输出消息队列不为空,则获取帧同步输出消息队列末尾的帧消息,并删除帧同步输出消息队列末尾的消息;若帧同步输出消息队列为空,则添加帧消息到帧同步输出消息队列末尾;然后释放自旋锁。
三、对于写&统计线程
在一种可能实现的方式中,根据所述第二通知消息控制所述写&统计线程将所述帧同步输出消息队列中帧消息添加到所述消息池,包括:创建文件指针,根据所述文件指针读取所述帧同步输出消息队列中帧消息;当所述帧同步输出消息队列为非空时,弹出所述帧同步输出消息队列中第一个帧消息,同时通知所述帧同步线程非满,以使得所述帧同步线程继续进行帧同步处理;将所述帧消息添加到所述消息池以及对基带数据进行误码率统计,直到读取到所述第二控制消息为止,关闭所述文件指针。
在一种可能实现的方式中,对基带数据进行误码率统计,包括:根据所述配置文件判断基带数据是否交织;若是,则通过帧解交织组件将所述基带数据进行解交织,得到并保存解交织后的基带数据;通过AOS虚拟信道计数解析组件、AOS虚拟信道标识解析组件、AOS虚拟信道有效长度解析组件将虚拟信道中任一路基带数据分离并写到输出文件中,根据所述输出文件进行误码率统计。
为了便于理解下面写&统计线程的工作过程进行简要介绍,参见图6,写&统计线程的工作过程具体步骤如下:
步骤61、打开需要写出的文件。
步骤62、取得帧同步输出消息队列中的一个帧消息。
具体的,首先申请加互斥锁,然后判断帧同步输出消息队列是否为空;若帧同步输出消息队列为空,则写&统计线程等待;若帧同步输出消息队列不为空,则获取帧同步输出消息队列中第一个帧消息,然后将帧同步输出消息队列中第一个帧消息删除,并通知帧同步线程,帧同步输出消息队列非满。
步骤63、判断基带数据是否解交织。
步骤64、若解交织,则写临时文件、AOS虚拟信道计数以及AOS虚拟信道标识。
具体的,AOS虚拟信道标识包括有效同步字数据输出以及统计误码率。
步骤65、判断虚拟信道数据有效长度。
步骤66、写文件,将读取的数据消息添加到消息池。
具体的,将读取的数据添加到消息池包括申请自旋锁,将读取的数据消息添加到消息池末尾,以及释放自旋锁。
步骤67、获取帧同步输出消息队列中下一个帧消息。
步骤68、当帧同步输出消息队列数据读取完成后,关闭文件。
本申请实施例所提供的方案中,通过构建遥感卫星基带数据处理的生产者消费者描述模型,并根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程,然后确定预设的配置文件参数以及初始化消息池参数,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列,再基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,以及将处理后的数据添加到所述环形消息队列中。因此,本申请实施例所提供的方案中,基于消息队列的多线程技术,将大规模的基带数据处理过程划分为多个逻辑线程,并按照多个逻辑线程并行处理模式对基带数据进行高速并行线程之间的数据同信和线程同步,进而提高基带数据处理的效率。
基于与图1所示的方法相同的发明构思,本申请实施例提供了一种基于消息队列的多线程遥感卫星基带数据处理装置,参见图7,该装置包括:
构建单元701,用于构建遥感卫星基带数据处理的生产者消费者描述模型,并根据所述生产者消费者描述模型将基带数据处理划分为多个逻辑线程;
确定单元702,用于确定预设的配置文件参数以及初始化消息池参数,根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程构建环形消息队列;
处理单元703,用于基于预设的控制机制控制所述多个逻辑线程对遥感卫星基带数据进行并行处理,以及将处理后的数据添加到所述环形消息队列中。
可选地,所述构建单元701,具体用于:
根据所述生产者消费者描述模型将基带数据处理划分为基带数据读取线程、帧同步处理线程以及同步后数据的写&统计线程,其中,所述基带数据读取线程为所述帧同步处理线程的生产者,所述帧同步处理线程既为所述基带数据读取线程的消费者,又为所述写&统计线程的生产者。
可选地,所述确定单元702,具体用于:
根据所述配置文件参数、所述初始化消息池参数以及所述多个逻辑线程分别确定所述基带数据读取线程、所述帧同步处理线程以及所述写&统计线程的格式以及输入输出参数;
初始化所述输入输出参数,根据初始化后的输入输出参数以及所述格式构建得到所述环形消息队列。
可选地,所述基带数据读取线程的格式为(基带数据路径,“读线程输出消息队列”,“消息池”),其中,所述基带数据路径为输入参数,所述读线程输出消息队列以及所述消息池为输出参数;
所述帧同步处理线程的格式为(配置文件,“读线程输出消息队列”,“帧同步输出消息队列”),其中,所述配置文件以及所述读线程输出消息队列为输出参数,所述帧同步输出消息队列为输出参数;
所述写&统计线程的格式为(配置文件,“帧同步输出消息队列”),其中,所述配置文件为输入参数,所述帧同步输出消息队列为输出参数。
可选地,所述处理单元703,具体用于:
控制所述基带数据读取线程从所述消息池中获取帧消息,将所述帧消息添加到所述读线程输出消息队列中,并判断所述读线程输出消息队列是否已满;
若读线程输出消息队列未满,则所述基带数据读取线程继续从所述消息池中获取帧消息,并生成第一通知信息;
根据所述第一通知信息控制所述帧同步处理线程启动读取所述读线程输出消息队列中的帧消息,并对所述帧消息进行帧同步处理,以及在帧同步处理过程中生成第二通知消息;
根据所述第二通知消息控制所述写&统计线程将所述帧同步输出消息队列中帧消息添加到所述消息池,以及通知所述帧同步线程非满。
可选地,所述处理单元703,具体用于:
控制打开基带数据文件,通过获取数据消息组件从所述消息池中获取帧消息,并根据所述初始化消息池参数将基带数据读取到帧消息的缓存中;
将所述帧消息添加到所述读线程输出消息队列的末尾,并判断所述读线程输出消息队列是否已满;
若未满,则继续从所述消息池中获取帧消息,并将帧消息添加到所述读线程输出消息队列的末尾,并向所述帧同步线程发送第一通知消息;
当所述基带数据文件中数据全部读取完成时,将当前获取的帧消息添加到所述消息池,以及通过获取控制消息组件获取一个第一控制消息,并将所述第一控制消息添加到所述读线程输出消息队列的末尾,其中,所述第一控制消息用于标识基带数据读取完成。
可选地,所述处理单元703,具体用于:
初始化帧同步参数,并根据所述配置文件设置基带数据交织状态以及帧同步缓存的大小,确定所述交织状态对应的待搜索同步字查找表;
创建读取帧消息流的对象,以及对所述对象进行初始化处理,其中,所述对象用于读取所述读线程输出消息队列中的帧消息;
通过所述对象读取所述读线程输出消息队列中的帧消息,判断所述读线程输出消息队列是否为空;
若不为空,则弹出所述读线程输出消息队列中第一个帧消息并加锁保护,将所述第一个帧消息添加到所述对象对应的帧消息队列中,并将所述读线程输出消息队列中第一个帧消息删除,以及通知所述基带数据读取线程非满,以使得所述基带数据读取线程继续从所述消息池中读取帧消息;
判断所述帧消息的类型是否为数据消息;
若是,则将所述帧消息缓存到所述帧同步缓存中,直到所述帧同步缓存填满为止;
当处于搜索状态时,根据所述待搜索同步字查找表在所述帧同步缓存中进行同步字搜索,根据所述配置文件中的预设阈值判断搜索出的同步字是否为有效同步字;
若是有效同步字,则从所述帧同步缓存中获取帧消息,对所述帧消息进行滑帧校正和极性校正,对校正通过的帧消息的帧头信息和数据进行格式化封装,得到封装后的帧消息;
将所述封装后的帧消息添加到所述帧同步输出消息队列中,并通知所述写&统计线程非空;
当所有数据帧同步完成后,在所述帧同步输出消息队列的末尾添加一个第二控制消息,其中,所述第二控制消息用于标识基带数据帧同步完成。
可选地,所述处理单元703,具体用于:
创建文件指针,根据所述文件指针读取所述帧同步输出消息队列中帧消息;
当所述帧同步输出消息队列为非空时,弹出所述帧同步输出消息队列中第一个帧消息,同时通知所述帧同步线程非满,以使得所述帧同步线程继续进行帧同步处理;
将所述帧消息添加到所述消息池以及对基带数据进行误码率统计,直到读取到所述第二控制消息为止,关闭所述文件指针。
可选地,所述处理单元703,具体用于:
根据所述配置文件判断基带数据是否交织;
若是,则通过帧解交织组件将所述基带数据进行解交织,得到并保存解交织后的基带数据;
通过AOS虚拟信道计数解析组件、AOS虚拟信道标识解析组件、AOS虚拟信道有效长度解析组件将虚拟信道中任一路基带数据分离并写到输出文件中,根据所述输出文件进行误码率统计。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。