数据处理方法和装置的制作方法

文档序号:7552923阅读:115来源:国知局
专利名称:数据处理方法和装置的制作方法
技术领域
本发明实施例涉及计算机网络技术,尤其涉及一种数据处理方法和装置。
背景技术
随着计算机网络技术的发展,多核多线程并发处理技术也得到的了迅速发展。在多核多线程并发处理的环境中,各线程在处理报文之前,需要读写报文所在业务流数据流的中间状态数据,如果同一业务流数据流的不同报文被多个线程同时处理,则会出现多个线程同时读写同一业务流数据流的中间状态数据的情形,而由于一个业务流数据流的中间状态数据同一时刻只能由同一线程读写,因此,存在资源竞争的问题,不同进程同一时刻处理同流报文则会存在冲突。为了避免冲突,现有技术中,根据报文的五元组信息计算哈希值,按业务处理线程数对哈希值进行求模运算,运算结果对应逻辑线程标识(Identity,以下简称:ID),从而产生了流到线程的映射关系,最后根据映射关系,将一条流的报文分发到固定的线程处理,这样对于一条流的数据是保证单线程处理,从而避免并发冲突。然而,由于报文分发的不均匀性,采用现有技术的方案,会出现在一段时间内,某些线程比较繁忙,而某些线程比较空闲的情况,从而导致多业务并发执行的性能以及网络设备的处理器的资源利用率均不高。

发明内容
本发明实施例提供一种数据处理方法和装置,以增加多业务并发执行的性能,提高网络设备的处理器的资源利用率。本发明实施例第一方面,提供一种数据处理方法,包括:在对待处理报文进行业务处理之前,检测所述待处理报文所在数据流中是否存在正在被处理的报文;若所述待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文发送到业务处理线程,以进行业务处理。结合第一方面,在第一种可能的实现方式中,所述检测所述待处理报文所在数据流中是否存在正在被处理的报文,包括:检测所述待处理报文所在数据流的处理状态,所述处理状态包括正在被处理状态和未被处理状态,其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理;所述若所述待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文发送到业务处理线程,以进行业务处理,包括:若检测到所述待处理报文所在数据流的处理状态为未被处理状态,将所述待处理报文所在数据流的处理状态置为正在被处理状态,将所述待处理报文发送到业务处理线程,以进行业务处理,并在所述业务处理线程对所述待处理报文处理完毕之后,将所述待处理报文所在数据流的处理状态置为未被处理状态。结合第一方面或第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:若检测到所述待处理报文所在数据流的处理状态为正在被处理状态,则将所述待处理报文缓存在第一缓存区中。结合第二种可能的实现方式,在第三种可能的实现方式中,所述检测所述待处理报文所在数据流的处理状态之前,还包括:判断所述第一缓存区是否为空;若是,则从第二缓存区中获取一个待处理报文,其中,所述第二缓存区用于缓存来自网络接口报文;若否,则从所述第一缓存区中获取一个待处理报文;相应地,所述检测所述待处理报文所在数据流的处理状态,包括:检测从所述第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态。结合第三种可能的实现方式,在第四种可能的实现方式中,所述第一缓存区包括一个或多个队列,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,所述队列的个数大于等于所有业务处理线程的个数;所述将所述待处理报文缓存在第一缓存区中,包括:判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的队列;若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的队列中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的队列中,并建立所述空的队列与所述待处理报文所在数据流的关联关系,以使所述空的队列与所述待处理报文所在的数据流相关联。结合第四种可能的实现方式,在第五种可能的实现方式中,所述将所述待处理报文所在数据流的处理状态置为正在被处理状态,包括:在流表中将所述待处理报文所在数据流的处理状态修改为正在被处理状态;其中,所述流表存储有所述待处理报文的流标识和处理状态的对应关系;所述将所述待处理报文所在数据流的处理状态置为未被处理状态,包括:在流表中将所述待处理报文所在数据流的处理状态修改为未被处理状态;所述检测从所述第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态,包括:若所述待处理报文为从所述第二缓存区中获取的待处理报文,则根据所述待处理报文的五元组信息,确定所述待处理报文的流标识,根据所述流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态;若所述待处理报文为从所述第一缓存区的队列中获取的待处理报文,则根据所述队列对应的流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态。结合第四种可能的实现方式或第五种可能的实现方式,在第六种可能的实现方式中,所述从所述第一缓存区中获取一个待处理报文之后,还包括:若缓存所述待处理报文的队列为空,则删除所述队列与所述待处理报文所在数据流之间的关联关系。结合第三种可能的实现方式,在第七种可能的实现方式中,所述第一缓存区包括一个或多个链表,其中,每一个链表与一条数据流相关联,用于缓存该数据流中的待处理报文,所述链表的个数大于等于所有业务处理线程的个数;所述将所述待处理报文缓存在第一缓存区中,包括:判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的链表;若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的链表中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的链表中,并建立所述空的链表与所述待处理报文所在数据流的关联关系,以使所述空的链表与所述待处理报文所在的数据流相关联。本发明实施例第二方面,提供一种数据处理装置,包括:检测模块,用于在对待处理报文进行业务处理之前,检测所述待处理报文所在数据流中是否存在正在被处理的报文;处理模块,用于若所述待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文发送到业务处理线程,以进行业务处理。结合第二方面,在第一种可能的实现方式中,所述检测模块,具体用于检测所述待处理报文所在数据流的处理状态,所述处理状态包括正在被处理状态和未被处理状态,其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理;所述处理模块,具体用于若检测模块检测到所述待处理报文所在数据流的处理状态为未被处理状态,将所述待处理报文所在数据流的处理状态置为正在被处理状态,将所述待处理报文发送到业务处理线程,以进行业务处理,并在所述业务处理线程对所述待处理报文处理完毕之后,将所述待处理报文所在数据流的处理状态置为未被处理状态。结合第二方面或第一种可能的实现方式,在第二种可能的实现方式中,所述处理模块,还用于若检测模块检测到所述待处理报文所在数据流的处理状态为正在被处理状态,则将所述待处理报文缓存在第一缓存区中。结合第二种可能的实现方式,在第三种可能的实现方式中,所述处理模块,还用于检测所述待处理报文所在数据流的处理状态之前,判断所述第一缓存区是否为空;若是,则从第二缓存区中获取一个待处理报文,其中,所述第二缓存区用于缓存来自网络接口报文;若否,则从所述第一缓存区中获取一个待处理报文;相应地,所述检测模块,具体用于检测从所述第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态。结合第三种可能的实现方式,在第四种可能的实现方式中,所述第一缓存区包括一个或多个队列,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,所述队列的个数大于等于所有业务处理线程的个数;所述处理模块,具体用于判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的队列;若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的队列中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的队列中,并建立所述空的队列与所述待处理报文所在数据流的关联关系,以使所述空的队列与所述待处理报文所在的数据流相关联。结合第四种可能的实现方式,在第五种可能的实现方式中,所述处理模块,具体用于在待处理报文所在数据流的处理状态为未被处理状态时,在流表中将所述待处理报文所在数据流的处理状态修改为正在被处理状态;其中,所述流表存储有所述待处理报文的流标识和处理状态的对应关系;并在所述业务处理线程对所述待处理报文处理完毕之后,在流表中将所述待处理报文所在数据流的处理状态修改为未被处理状态;所述检测模块,具体用于若所述待处理报文为从所述第二缓存区中获取的待处理报文,则根据所述待处理报文的五元组信息,确定所述待处理报文的流标识,根据所述流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态;若所述待处理报文为从所述第一缓存区的队列中获取的待处理报文,则根据所述队列对应的流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态。结合第四种可能的实现方式或第五种可能的实现方式,在第六种可能的实现方式中,所述处理模块,具体用于所述从所述第一缓存区中获取一个待处理报文之后,若缓存所述待处理报文的队列为空,则删除所述队列与所述待处理报文所在数据流之间的关联关系O结合第三种可能的实现方式,在第七种可能的实现方式中,所述第一缓存区包括一个或多个链表,其中,每一个链表与一条数据流相关联,用于缓存该数据流中的待处理报文,所述链表的个数大于等于所有业务处理线程的个数;所述处理模块,具体用于判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的链表;若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的链表中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的链表中,并建立所述空的链表与所述待处理报文所在数据流的关联关系,以使所述空的链表与所述待处理报文所在的数据流相关联。本发明实施例提供的数据处理方法和装置,通过在对待处理报文进行业务处理之前,检测待处理报文所在数据流中是否存在正在被处理的报文,若待处理报文所在数据流中不存在正在被处理的报文,则将待处理报文发送到业务处理线程,以进行业务处理,由于待处理报文所在数据流中不存在正在被处理的报文,因此,可将待处理报文发送到任何一个业务处理线程中进行业务处理,不会发生同一数据流的报文并发处理的问题,均衡各个业务处理线程的任务量,增加多业务并发执行的性能,提高网络设备的处理器的资源利用率。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明数据处理方法实施例一的流程示意图;图2为本发明数据处理方法实施例二的流程示意图;图3为本发明数据处理装置实施例一的结构示意图4为本发明数据处理装置实施例二的结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明数据处理方法实施例一的流程示意图,如图1所示,本实施例的方法包括:SlOl:在对待处理报文进行业务处理之前,检测待处理报文所在数据流中是否存在正在被处理的报文,若否,则执行S102,若是,则执行S103。具体地,可通过查询待处理报文所在数据流的报文处理状态确定待处理报文所在数据流中是否存在正在被处理的报文。也可通过查询各业务处理线程正在处理的数据流确定待处理报文所在数据流中是否存在正在被处理的报文,也可通过其他方式检测待处理报文所在数据流中是否存在正在被处理的报文,本发明实施例对此不作限制。S102:将待处理报文发送到业务处理线程,以进行业务处理。若待处理报文所在数据流中不存在正在被处理的报文,则将待处理报文发送到业务处理线程中进行业务处理,由于待处理报文所在数据流中不存在正在被处理的报文,因此,可将待处理报文发送到任何一个业务处理线程中进行业务处理,不会发生同一数据流的报文并发处理的问题,即各业务处理线程同一时刻并发处理的为不同数据流的报文,在将待处理报文发送到业务处理线程进行业务处理时,可根据调度策略,将待处理报文发送到比较空闲的业务处理线程进行业务处理,均衡各个业务处理线程的任务量,提高处理器的资源利用率。S103:其他处理。作为一种可行的实现方式:若待处理报文所在数据流中存在正在被处理的报文,则将待处理报文缓存在第一缓存区中,以便在各业务处理线程处理的数据流状态变化后,从第一缓存区中获取待处理报文。本实施例中,通过在对待处理报文进行业务处理之前,检测待处理报文所在数据流中是否存在正在被处理的报文,若待处理报文所在数据流中不存在正在被处理的报文,则将待处理报文发送到业务处理线程,以进行业务处理,由于待处理报文所在数据流中不存在正在被处理的报文,因此,可将待处理报文发送到任何一个业务处理线程中进行业务处理,不会发生同一数据流的报文并发处理的问题,均衡各个业务处理线程的任务量,增加多业务并发执行的性能,提高网络设备的处理器的资源利用率。图2为本发明数据处理方法实施例二的流程示意图,如图2所示,本实施例的方法包括:S201:判断第一缓存区是否为空,若是,执行S202,若否,执行S203。S202:从第二缓存区中获取一个待处理报文。 具体地,第二缓存区用于缓存来自网络接口的报文。S203:从第一缓存区中获取一个待处理报文。
具体地,若检测到待处理报文所在数据流中存在正在被处理的报文,则将待处理报文缓存在第一缓存区中,可选地,第一缓存区中的待处理报文缓存在一个或多个队列中,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,队列的个数大于等于网络设备中所有业务处理线程的个数。通过S20f S203的步骤保证了报文先到先处理的原则,即优选获取第一缓存区中的报文,在第一缓存区为空的情况下,再获取第二缓存区中的报文。S204:检测待处理报文所在数据流中是否存在正在被处理的报文。若是,执行S205,若否,执行S206。具体地,检测待处理报文所在数据流中是否存在正在被处理的报文可通过检测待处理报文所在数据流的处理状态来实现,处理状态包括正在被处理状态和未被处理状态,当待处理报文所在数据流的处理状态为正在被处理状态,则确定待处理报文所在数据流中存在正在被处理的报文;当待处理报文所在数据流的处理状态为未被处理状态,则确定待处理报文所在数据流中不存在正在被处理的报文;其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理;分为以下两种情况:第一种情况:若待处理报文为从第一缓存区的队列中获取的待处理报文,则根据待处理报文所在队列对应的流标识从流表中查询得到待处理报文所在数据流的处理状态,以确定待处理报文所在数据流是否存在正在被处理的报文。第二种情况:若待处理报文为从第二缓存区中获取的待处理报文,则根据待处理报文的五元组信息,确定待处理报文的流标识,根据流标识从流表中查询得到待处理报文所在数据流的处理状态,以确定待处理报文所在数据流中是否存在正在被处理的报文。同一个数据流的不同报文之间具有相同的五元组信息,五元组信息包括:源网络协议(Internet Protocol,以下简称:IP)地址、目的IP地址、源端口、目的端口、传输层协议。因此,若待处理报文为从第二缓存区中获取的待处理报文,可根据待处理报文的五元组信息,确定待处理报文的流标识,然后再根据流标识检测待处理报文所在数据流中是否存在正在被处理的报文。具体可通过查询流表中的流标识对应的报文处理状态确定待处理报文所在数据流是否存在正在处理报文。值得说明的是,在执行S204之前,还包括建立流表的步骤,具体可以是根据流的五元组信息建立五元组信息与流标识之间的一一对应关系,可选地,可将流标识对应的数据流处理状态存储在流表中,也可以将流标识对应的数据流处理状态存储在流表之外的独立存储空间中,总之,可通过流标识查询到流标识对应的数据流处理状态即可,对流标识对应的数据流处理状态的具体的存储方式,本发明对此不做限制。 可选地,在上述实施例中除了五元组信息外,还可以通过其他能够标识同一数据流的不同报文的信息,来建立流表,例如六元组信息,其具体实现方式与五元组信息类似,此处不再赘述。S205:将待处理报文缓存在第一缓存区中。具体地,判断第一缓存区中是否存在与待处理报文所在数据流相关联的队列;若存在,则将待处理报文缓存在与待处理报文所数据流相关联的队列中,可选地,可通过流标识建立待处理报文所在数据流与队列之间的关联关系。
若不存在,则将待处理报文缓存在第一缓存区中的空的队列中,并建立空的队列与待处理报文所在数据流的关联关系,以使空的队列与待处理报文所在的数据流相关联,可选地,可通过将空的队列与待处理报文所在数据流的流标识对应。通过在队列头存储流标识来建立队列与待处理报文所在数据流的流标识的关联关系。也就是说,一个队列只保存一条数据流的报文。S206:将待处理报文所在数据流的处理状态置为正在被处理状态。根据待处理报文所在数据流的流标识,在流表中将待处理报文所在数据流的处理状态置修改为正在被处理状态,其中,流表存储有待处理报文的流标识和处理状态的对应关系。可选地,若待处理报文为从第一缓存区中获取的待处理报文,在获取第一缓存区中的待处理报文之后,还包括:判断待处理报文缓存的队列是否为空,若是,则删除该队列与待处理报文所在数据流之间的关联关系,使该队列成为一个空的队列,以便存储新的数据流的待处理报文。S207:将待处理报文发送到业务处理线程,以进行业务处理。可选地,可直接将待处理报文发送到当前空闲的业务处理线程进行业务处理。也可以将待处理报文进行缓存,具体的缓存方式本发明对此不作限制,然后根据调度策略发送到业务处理线程进行业务处理。由于待处理报文所在数据流中不存在正在被处理的报文,因此,可将待处理报文发送到任何一个业务处理线程中进行业务处理,不会发生同一数据流的报文并发处理的问题,任何能够均衡各个业务处理线程的任务量的调度方式都可以,从而,提高网络设备的处理器的资源利用率。S208:将待处理报文所在数据流的处理状态置为未被处理状态。在业务处理线程处理完待处理报文之后,将待处理报文所在数据流的处理状态置为未被处理状态,具体地,在流表中将待处理报文所在数据流的处理状态修改为未被处理状态,未被处理状态标识该数据流中不存在正在被处理的报文,以使新的待处理报文被发送到业务处理线程进行业务处理。本实施例中,通过检测待处理报文所在数据流中是否存在正在被处理的报文,若否,将待处理报文所在数据流的处理状态置为正在被处理状态,将待处理报文发送到业务处理线程进行业务处理,在业务处理线程处理完待处理报文之后,将待处理报文所在数据流的处理状态置为未被处理状态,以使新的待处理报文被发送到业务处理线程进行业务处理,由于待处理报文所在数据流中不存在正在被处理的报文,才将待处理报文发送到业务处理线程中进行业务处理,因此,可将待处理报文发送到任何一个业务处理线程中进行业务处理,不会发生同一数据流的报文并发处理的问题,即各业务处理线程同一时刻并发处理的为不同数据流的报文,在将待处理报文发送到业务处理线程进行业务处理时,可根据调度策略,将待处理报文发送到比较空闲的业务处理线程进行业务处理,均衡各个业务处理线程的任务量,以增加多业务并发执行的性能,提高网络设备的处理器的资源利用率。在图2所示实施例中,可选地,第一缓存区中的待处理报文可以缓存在任意的数据结构中,例如,第一缓存区中的待处理报文缓存在一个或多个链表或者哈希表中,其中,各链表或者哈希表对应一个数据流的流标识,链表或者哈希表的个数大于等于业务处理线程的个数,本发明对此不做限制。
图3为本发明数据处理装置实施例一的结构示意图,如图3所示,本实施例的装置包括检测模块301和处理模块302,其中,检测模块301用于在对待处理报文进行业务处理之前,检测待处理报文所在数据流中是否存在正在被处理的报文;处理模块302用于若待处理报文所在数据流中不存在正在被处理的报文,则将待处理报文发送到业务处理线程,以进行业务处理。本实施例的装置用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。在上述实施例中,检测模块301具体用于检测待处理报文所在数据流的处理状态,处理状态包括正在被处理状态和未被处理状态,其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理;处理模块302具体用于若检测模块检测到待处理报文所在数据流的处理状态为未被处理状态,将待处理报文所在数据流的处理状态置为正在被处理状态,将待处理报文发送到业务处理线程,以进行业务处理,并在业务处理线程对待处理报文处理完毕之后,将待处理报文所在数据流的处理状态置为未被处理状态。在上述实施例中,处理模块302还用于若检测模块检测到待处理报文所在数据流的处理状态为正在被处理状态,则将待处理报文缓存在第一缓存区中。在上述实施例中,处理模块302还用于检测待处理报文所在数据流的处理状态之前,判断第一缓存区是否为空;若是,则从第二缓存区中获取一个待处理报文,其中,第二缓存区用于缓存来自网络接口报文;若否,则从第一缓存区中获取一个待处理报文;相应地,检测模块301具体用于检测从第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态。在上述实施例中,第一缓存区包括一个或多个队列,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,队列的个数大于等于所有业务处理线程的个数;处理模块302具体用于判断第一缓存区中是否存在与待处理报文所在数据流相关联的队列;若是,则将待处理报文缓存在与待处理报文所在数据流相关联的队列中;若否,则将待处理报文缓存在第一缓存区中的空的队列中,并建立空的队列与待处理报文所在数据流的关联关系,以使空的队列与待处理报文所在的数据流相关联。在上述实施例中,处理模块302处理模块302具体用于在待处理报文所在数据流的处理状态为未被处理状态时,在流表中将待处理报文所在数据流的处理状态修改为正在被处理状态;其中,流表存储有待处理报文的流标识和处理状态的对应关系;并在业务处理线程对待处理报文处理完毕之后,在流表中将待处理报文所在数据流的处理状态修改为未被处理状态;检测模块301具体用于若待处理报文为从第二缓存区中获取的待处理报文,则根据待处理报文的五元组信息,确定待处理报文的流标识,根据流标识从流表中查询得到待处理报文所在数据流的处理状态;若待处理报文为从第一缓存区的队列中获取的待处理报文,则根据队列对应的流标识从流表中查询得到待处理报文所在数据流的处理状态。在上述实施例中,处理模块302具体用于从第一缓存区中获取一个待处理报文之后,若缓存待处理报文的队列为空,则删除队列与待处理报文所在数据流之间的关联关系。在上述实施例中,第一缓存区包括一个或多个链表,其中,每一个链表与一条数据流相关联,用于缓存该数据流中的待处理报文,链表的个数大于等于所有业务处理线程的个数;处理模块302具体用于判断第一缓存区中是否存在与待处理报文所在数据流相关联的链表;若是,则将待处理报文缓存在与待处理报文所在数据流相关联的链表中;若否,则将待处理报文缓存在第一缓存区中的空的链表中,并建立空的链表与待处理报文所在数据流的关联关系,以使空的链表与待处理报文所在的数据流相关联。本实施例的装置用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。图4为本发明数据处理装置实施例二的结构示意图,如图4所示,本实施例本实施例的装置包括通信接口 401、至少一个处理器402和存储器403,处理器402、存储器403和通信接口 401通过总线连接并完成相互间的通信。所述总线可以是工业标准体系结构(Industry Standard Architecture,简称为 ISA)总线、外部设备互连(PeripheralComponent,简称为PCI)总线或扩展工业标准体系结构(Extended Industry StandardArchitecture,简称为EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中,通信接口 401可以为网口、USB接口、射频单元、天线、w1-fi通信模块等可以实现数据收发功能的器件或单元;存储器403用于存储可执行程序代码,该程序代码包括计算机操作指令。存储器403可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。在一个实施例中,处理器402通过读取存储器403中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于:在对待处理报文进行业务处理之前,检测所述待处理报文所在数据流中是否存在正在被处理的报文;若待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文通过通信接口401发送到业务处理线程,以进行业务处理。处理器402可能是一个中央处理器(CentralProcessing Unit,简称为 CPU),或者是特定集成电路(Application Specific IntegratedCircuit,简称为ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。上述处理器402除了实现上述功能之外,还可用于执行上述方法实施例中的其他流程,在此不再赘述。其中,上述流程的具体细节,可以参照上述方法实施例,此处不再赘述。在上述实施例中,处理器402具体用于执行程序代码对应的程序,以用于:检测待处理报文所在数据流的处理状态,处理状态包括正在被处理状态和未被处理状态,其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理;若检测模块检测到待处理报文所在数据流的处理状态为未被处理状态,将待处理报文所在数据流的处理状态置为正在被处理状态,将待处理报文发送到业务处理线程,以进行业务处理,并在业务处理线程对待处理报文处理完毕之后,将待处理报文所在数据流的处理状态置为未被处理状态。在上述实施例中,处理器402还用于执行程序,以用于:若检测到待处理报文所在数据流的处理状态为正在被处理状态,则将待处理报文缓存在第一缓存区中。在上述实施例中,处理器402还用于执行程序,以用于:检测待处理报文所在数据流的处理状态之前,判断第一缓存区是否为空;若是,则从第二缓存区中获取一个待处理报文,其中,第二缓存区用于缓存来自网络接口报文;若否,则从第一缓存区中获取一个待处理报文;相应地,处理器402具体用于执行程序,以用于:检测从第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态。在上述实施例中,第一缓存区和第二缓存区可以为存储器403中的两个独立的存储空间,进一步地,第一缓存区包括一个或多个队列,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,队列的个数大于等于所有业务处理线程的个数;处理器402具体用于执行程序,以用于:判断第一缓存区中是否存在与待处理报文所在数据流相关联的队列;若是,则将待处理报文缓存在与待处理报文所在数据流相关联的队列中;若否,则将待处理报文缓存在第一缓存区中的空的队列中,并建立空的队列与待处理报文所在数据流的关联关系,以使空的队列与待处理报文所在的数据流相关联。在上述实施例中,处理器402具体用于执行程序,以用于:在待处理报文所在数据流的处理状态为未被处理状态时,在流表中将待处理报文所在数据流的处理状态修改为正在被处理状态;其中,流表存储有待处理报文的流标识和处理状态的对应关系;并在业务处理线程对待处理报文处理完毕之后,在流表中将待处理报文所在数据流的处理状态修改为未被处理状态;处理器402具体用于执行程序,以用于:若待处理报文为从第二缓存区中获取的待处理报文,则根据待处理报文的五元组信息,确定待处理报文的流标识,根据流标识从流表中查询得到待处理报文所在数据流的处理状态;若待处理报文为从第一缓存区的队列中获取的待处理报文,则根据队列对应的流标识从流表中查询得到待处理报文所在数据流的处理状态。在上述实施例中,处理器402具体用于执行程序,以用于:从第一缓存区中获取一个待处理报文之后,若缓存待处理报文的队列为空,则删除队列与待处理报文所在数据流之间的关联关系。 在另一个实施例中,第一缓存区包括一个或多个链表,其中,每一个链表与一条数据流相关联,用于缓存该数据流中的待处理报文,链表的个数大于等于所有业务处理线程的个数;处理器402具体用于执行程序,以用于:判断第一缓存区中是否存在与待处理报文所在数据流相关联的链表;若是,则将待处理报文缓存在与待处理报文所在数据流相关联的链表中;若否,则将待处理报文缓存在第一缓存区中的空的链表中,并建立空的链表与待处理报文所在数据流的关联关系,以使空的链表与待处理报文所在的数据流相关联。本实施例的装置用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种数据处理方法,其特征在于,包括: 在对待处理报文进行业务处理之前,检测所述待处理报文所在数据流中是否存在正在被处理的报文; 若所述待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文发送到业务处理线程,以进行业务处理。
2.根据权利要求1所述的方法,其特征在于,所述检测所述待处理报文所在数据流中是否存在正在被处理的报文,包括: 检测所述待处理报文所在数据流的处理状态,所述处理状态包括正在被处理状态和未被处理状态,其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理; 所述若所述待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文发送到业务处理线程,以进行业务处理,包括: 若检测到所述待处理报文所在数据流的处理状态为未被处理状态,将所述待处理报文所在数据流的处理状态置为正在被处理状态,将所述待处理报文发送到业务处理线程,以进行业务处理,并在所述业务处理线程对所述待处理报文处理完毕之后,将所述待处理报文所在数据流的处理状态置为未被处理状态。
3.根据权利要求2所述的方法,其特征在于,还包括: 若检测到所述待处理报文所在数据流的处理状态为正在被处理状态,则将所述待处理报文缓存在第一缓存区中。
4.根据权利要求3所述的方法,其特征在于,所述检测所述待处理报文所在数据流的处理状态之前, 还包括: 判断所述第一缓存区是否为空; 若是,则从第二缓存区中获取一个待处理报文,其中,所述第二缓存区用于缓存来自网络接口报文; 若否,则从所述第一缓存区中获取一个待处理报文; 相应地,所述检测所述待处理报文所在数据流的处理状态,包括:检测从所述第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态。
5.根据权利要求4所述的方法,其特征在于, 所述第一缓存区包括一个或多个队列,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,所述队列的个数大于等于所有业务处理线程的个数; 所述将所述待处理报文缓存在第一缓存区中,包括: 判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的队列; 若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的队列中; 若否,则将所述待处理报文缓存在所述第一缓存区中的空的队列中,并建立所述空的队列与所述待处理报文所在数据流的关联关系,以使所述空的队列与所述待处理报文所在的数据流相关联。
6.根据权利要求5所述的方法,其特征在于,所述将所述待处理报文所在数据流的处理状态置为正在被处理状态,包括: 在流表中将所述待处理报文所在数据流的处理状态修改为正在被处理状态;其中,所述流表存储有所述待处理报文的流标识和处理状态的对应关系; 所述将所述待处理报文所在数据流的处理状态置为未被处理状态,包括: 在流表中将所述待处理报文所在数据流的处理状态修改为未被处理状态; 所述检测从所述第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态,包括: 若所述待处理报文为从所述第二缓存区中获取的待处理报文,则根据所述待处理报文的五元组信息,确定所述待处理报文的流标识,根据所述流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态; 若所述待处理报文为从所述第一缓存区的队列中获取的待处理报文,则根据所述队列对应的流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态。
7.根据权利要求5或6所述的方法,其特征在于,所述从所述第一缓存区中获取一个待处理报文之后,还包括: 若缓存所述待处理报文的队列为空,则删除所述队列与所述待处理报文所在数据流之间的关联关系。
8.根据权利要求4所述的方法,其特征在于,所述第一缓存区包括一个或多个链表,其中,每一个链表与一条数据流相关联,用于缓存该数据流中的待处理报文,所述链表的个数大于等于所有业务处理线程的个数; 所述将所述待处理报文缓存在第一缓存区中,包括: 判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的链表; 若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的链表中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的链表中,并建立所述空的链表与所述待处理报文所在数据流的关联关系,以使所述空的链表与所述待处理报文所在的数据流相关联。
9.一种数据处理装置,其特征在于,包括: 检测模块,用于在对待处理报文进行业务处理之前,检测所述待处理报文所在数据流中是否存在正在被处理的报文; 处理模块,用于若所述待处理报文所在数据流中不存在正在被处理的报文,则将所述待处理报文发送到业务处理线程,以进行业务处理。
10.根据权利要求9所述的装置,其特征在于,所述检测模块,具体用于,检测所述待处理报文所在数据流的处理状态,所述处理状态包括正在被处理状态和未被处理状态,其中,正在被处理状态用于指示数据流中的一个或多个报文正在被业务处理线程处理,未被处理状态用于指示数据流中没有任何报文正在被业务处理线程处理; 所述处理模块,具体用于,若所述检测模块检测到所述待处理报文所在数据流的处理状态为未被处理状态,将所述待处理报文所在数据流的处理状态置为正在被处理状态,将所述待处理报文发送到业务处理线程,以进行业务处理,并在所述业务处理线程对所述待处理报文处理完毕之后,将所述待处理报文所在数据流的处理状态置为未被处理状态。
11.根据权利要求10所述的装置,其特征在于,所述处理模块,还用于若检测模块检测到所述待处理报文所在数据流的处理状态为正在被处理状态,则将所述待处理报文缓存在第一缓存区中。
12.根据权利要求11所述的装置,其特征在于,所述处理模块,还用于在检测模块检测所述待处理报文所在数据流的处理状态之前,判断所述第一缓存区是否为空;若是,则从第二缓存区中获取一个待处理报文,其中,所述第二缓存区用于缓存来自网络接口报文;若否,则从所述第一缓存区中获取一个待处理报文; 相应地,所述检测模块,具体用于检测从所述第一缓存区或第二缓存区获取的待处理报文所在数据流的处理状态。
13.根据权利要求12所述的装置,其特征在于, 所述第一缓存区包括一个或多个队列,其中,每一个队列与一条数据流相关联,用于缓存该数据流中的待处理报文,所述队列的个数大于等于所有业务处理线程的个数; 所述处理模块,具体用于判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的队列;若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的队列中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的队列中,并建立所述空的队列与所述待处理报文所在数据流的关联关系,以使所述空的队列与所述待处理报文所在的数据流相关联。
14.根据权利要求13所述的装置,其特征在于,所述处理模块,具体用于在待处理报文所在数据流的处理状态为未被处理状态时,在流表中将所述待处理报文所在数据流的处理状态修改为正在被处理状态;其中,所述流表存储有所述待处理报文的流标识和处理状态的对应关系;并在所述业务 处理线程对所述待处理报文处理完毕之后,在流表中将所述待处理报文所在数据流的处理状态修改为未被处理状态; 所述检测模块,具体用于若所述待处理报文为从所述第二缓存区中获取的待处理报文,则根据所述待处理报文的五元组信息,确定所述待处理报文的流标识,根据所述流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态;若所述待处理报文为从所述第一缓存区的队列中获取的待处理报文,则根据所述队列对应的流标识从所述流表中查询得到所述待处理报文所在数据流的处理状态。
15.根据权利要求13或14所述的装置,其特征在于,所述处理模块,具体用于所述从所述第一缓存区中获取一个待处理报文之后,若缓存所述待处理报文的队列为空,则删除所述队列与所述待处理报文所在数据流之间的关联关系。
16.根据权利要求12所述的装置,其特征在于,所述第一缓存区包括一个或多个链表,其中,每一个链表与一条数据流相关联,用于缓存该数据流中的待处理报文,所述链表的个数大于等于所有业务处理线程的个数; 所述处理模块,具体用于判断所述第一缓存区中是否存在与所述待处理报文所在数据流相关联的链表;若是,则将所述待处理报文缓存在与所述待处理报文所在数据流相关联的链表中;若否,则将所述待处理报文缓存在所述第一缓存区中的空的链表中,并建立所述空的链表与所述待处理报文所在数据流的关联关系,以使所述空的链表与所述待处理报文所在的数据流相关联。
全文摘要
本发明实施例提供一种数据处理方法和装置,通过在对待处理报文进行业务处理之前,检测待处理报文所在数据流中是否存在正在被处理的报文,若待处理报文所在数据流中不存在正在被处理的报文,则将待处理报文发送到处理线程中进行业务处理,由于待处理报文所在数据流中不存在正在被处理的报文,因此,可将待处理报文发送到任何一个处理线程中进行业务处理,不会发生同一数据流的报文并发处理的问题,均衡各个处理线程的任务量,从而,提高网络设备处理器的资源利用率。
文档编号H04L12/70GK103166845SQ20131006662
公开日2013年6月19日 申请日期2013年3月1日 优先权日2013年3月1日
发明者史云龙, 何俊, 杨兴华 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1