一种基于IPC的进程间异步处理方法及系统与流程

文档序号:12363219阅读:140来源:国知局
一种基于IPC的进程间异步处理方法及系统与流程

本发明涉及软件技术领域,更具体地说,涉及一种基于IPC的进程间异步处理方法及系统。



背景技术:

一般在服务器的软件程序开发过程中,会有很多进程来协同完成任务,如果进程间的通信不预先规范设计进行约束,会造成实现方式多、通道繁多、效率不高、管理复杂及维护困难等问题,并且数据处理流程难以进行跟踪,可扩展性也不高。

因此,如何解决上述问题,实现进程间的高效率协同工作是本领域技术人员需要解决的问题。



技术实现要素:

本发明的目的在于提供一种基于IPC的进程间异步处理方法及系统,以实现进程间的高效率协同工作。

为实现上述目的,本发明实施例提供了如下技术方案:

一种基于IPC的进程间异步处理方法,包括:

接收第一消息结构体;所述第一消息结构体包括消息头和消息内容,所述消息头包括消息类型信息、消息回应信息和回应标识;若所述消息回应信息为需要回应,则将与所述第一消息结构体对应的响应处理函数存入内部队列;

第一线程接收所述第一消息结构体,调用对应的处理函数进行处理,并生成第二消息结构体;所述第二消息结构体的回应标识为回应消息;

第二线程接收所述第二消息结构体,从所述内部队列获取对应的响应处理函数进行处理。

其中,将与所述第一消息结构体对应的响应处理函数存入内部队列之后,还包括:

将与所述第一消息结构体对应的超时定时器存入定时器队列;

则所述第二线程接收所述第二消息结构体之后,还包括:

从所述定时器队列获取对应的超时定时器,若所述超时定时器未超时,则关闭所述超时定时器;若所述超时定时器超时,则调用对应的超时函数进行处理。

其中,所述第一线程接收所述第一消息结构体,调用对应的处理函数进行处理,包括:

所述第一线程接收所述第一消息结构体,根据所述第一消息结构体的消息类型信息,从第一函数指针数组查询对应的处理函数进行处理。

其中,若所述第二线程接收的消息结构体中的回应标识不是回应消息,则根据消息结构体的消息类型信息,从第二函数指针数组查询对应的处理函数进行处理。

其中,还包括:

接收处理函数扩展指令;

根据所述处理函数扩展指令添加对应的处理函数,并更新第一函数指针数组和第二函数指针数组。

一种基于IPC的进程间异步处理系统,包括:

接收模块,用于接收第一消息结构体;所述第一消息结构体包括消息头和消息内容,所述消息头包括消息类型信息、消息回应信息和回应标识;

第一存入模块,用于当所述消息回应信息为需要回应,则将与所述第一消息结构体对应的响应处理函数存入内部队列;

第一线程处理模块,用于当第一线程接收所述第一消息结构体时,调用对应的处理函数进行处理,并生成第二消息结构体;所述第二消息结构体的回应标识为回应消息;

第二线程处理模块,用于当第二线程接收所述第二消息结构体时,从所述内部队列获取对应的响应处理函数进行处理。

其中,还包括:

第二存入模块,用于将与所述第一消息结构体对应的超时定时器存入定时器队列;

超时定时器处理模块,用于在所述第二线程接收所述第二消息结构体之后,从所述定时器队列获取对应的超时定时器,若所述超时定时器未超时,则关闭所述超时定时器;若所述超时定时器超时,则调用对应的超时函数进行处理。

其中,所述第一线程处理模块通过所述第一线程接收所述第一消息结构体,根据所述第一消息结构体的消息类型信息,从第一函数指针数组查询对应的处理函数进行处理。

其中,若第二线程处理模块判定所述第二线程接收的消息结构体中的回应标识不是回应消息,则根据消息结构体的消息类型信息,从第二函数指针数组查询对应的处理函数进行处理。

其中,还包括:

扩展指令接收模块,用于接收处理函数扩展指令;

执行模块,用于根据所述处理函数扩展指令添加对应的处理函数,并更新第一函数指针数组和第二函数指针数组。

通过以上方案可知,本发明实施例提供的一种基于IPC的进程间异步处理方法及系统,包括:接收第一消息结构体;所述第一消息结构体包括消息头和消息内容,所述消息头包括消息类型信息、消息回应信息和回应标识;若所述消息回应信息为需要回应,则将与所述第一消息结构体对应的响应处理函数存入内部队列;第一线程接收所述第一消息结构体,调用对应的处理函数进行处理,并生成第二消息结构体;所述第二消息结构体的回应标识为回应消息;第二线程接收所述第二消息结构体,从所述内部队列获取对应的响应处理函数进行处理;可见,在本方案中没有循环查询逻辑,无业务时没有CPU使用率,并且消息完成时可调用预置的响应处理函数进行处理,实现进程间的高效率协同工作。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例公开的一种基于IPC的进程间异步处理方法流程图;

图2为本发明实施例公开的发送时序图示意图;

图3为本发明实施例公开的接收端处理流程示意图;

图4为本发明实施例公开的一种基于IPC的进程间异步处理系统结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例公开了一种基于IPC的进程间异步处理方法及系统,以实现进程间的高效率协同工作。

参见图1,本发明实施例提供的一种基于IPC的进程间异步处理方法,包括:

S101、接收第一消息结构体;所述第一消息结构体包括消息头和消息内容,所述消息头包括消息类型信息、消息回应信息和回应标识;若所述消息回应信息为需要回应,则将与所述第一消息结构体对应的响应处理函数存入内部队列;

其中,将与所述第一消息结构体对应的响应处理函数存入内部队列之后,还包括:

将与所述第一消息结构体对应的超时定时器存入定时器队列;

具体的,本实施例中的具体的消息结构包括:

本实施例中的消息头messageheader包含消息类型type、是否需要响应needAck、是否是响应消息isAck。整个消息message包括消息头messageheader和body。

具体的,参见图2,为本实施例提供的发送时序图,当接收第一消息结构体后,判断第一消息结构体中的消息回应信息是否为需要回应,若需要回应,则将与所述消息结构体对应的响应处理函数存入内部队列,并启动超时定时器并压入定时器队列;将第一消息结构体发送到接收端,即本方案中的第一线程,第一线程接收并处理完消息后,填写第二消息结构体,第二消息结构体即为响应消息,并将响应消息发送至接收线程,即本方案中的第二线程,接收线程关闭定时器并调用对应的响应处理函数进行处理。

S102、第一线程接收所述第一消息结构体,调用对应的处理函数进行处理,并生成第二消息结构体;所述第二消息结构体的回应标识为回应消息;

其中,所述第一线程接收所述第一消息结构体,调用对应的处理函数进行处理,包括:

所述第一线程接收所述第一消息结构体,根据所述第一消息结构体的消息类型信息,从第一函数指针数组查询对应的处理函数进行处理。

S103、第二线程接收所述第二消息结构体,从所述内部队列获取对应的响应处理函数进行处理。

其中,若所述第二线程接收的消息结构体中的回应标识不是回应消息,则根据所述消息结构体的消息类型信息,从第二函数指针数组查询对应的处理函数进行处理。

则所述第二线程接收所述第二消息结构体之后,还包括:

从所述定时器队列获取对应的超时定时器,若所述超时定时器未超时,则关闭所述超时定时器;若所述超时定时器超时,则调用对应的超时函数进行处理。

具体的,参见图3,为本实施例提供的接收端处理流程示意图,第二线程接收到第二消息结构体后,判断第二消息结构体的回应标识是否为回应消息,若是,则判定第二消息结构体为响应消息,则从定时器队列中取出相应的一个定时器并关闭,从响应处理函数队列中取出相应的响应处理函数处理消息。如果是非响应消息,则根据消息类型直接调用相应的消息处理函数进行处理。

具体的,本实施例提供一具体的进程间异步处理方法:

首先,在两个通信进程中间通过msgget系统调用打开两个相同的消息队列QueueA和QueueB,用整形定义一系列的消息类型,并定义第一函数指针数组arraryFuncA,这些函数指针指向的函数用于处理QueueA发过来的一个类型的消息,消息类型为数组下标,定义第二函数指针数组arraryFuncB,这些函数指针指向的函数用于处理QueueB发过来的一个类型的消息,消息类型为数组下标。QueueA的接收端启动第一线程ThreadA用于循环接收消息,QueueB的接收端启动第二线程ThreadB用于循环接收消息。

并且,通过interfaceA向QueueA发送信息时,需要填写消息结构体,如果该消息是需要回应的,那么需要将回应消息的响应处理函数放入内部队列listFunc,同时启动超时定时器(定时器一旦到时间就认为超时,会执行超时处理函数),并将超时定时器放入定时器队列listTime。

处理消息时,若第一线程ThreadA收到消息时,从arraryFuncA中根据消息类型查询对应处理函数进行处理。处理完成后,如果是需要回应的消息,则填写第二消息结构体,包含消息类型,类型是回应消息,消息体内填具体回应内容,通过interfaceB,将该消息发送到第二线程QueueB中。

第二线程ThreadB收到消息时,如果是回应消息,则从listTime中取出超时定时器并关闭,从listFunc中取出回应消息处理函数进行处理。如果不是回应消息,则根据消息类型从arraryFuncB取出消息处理函数进行处理。

基于上述技术方案,本方案还包括:

接收处理函数扩展指令;

根据所述处理函数扩展指令添加对应的处理函数,并更新第一函数指针数组和第二函数指针数组。

具体的,在本实施例中,若需要进行扩展,只需要添加消息类型和对应的消息处理函数即可,如果需要异步处理回应消息,还需增加回应消息处理函数。

具体的,在本方案中没有循环查询逻辑,无业务时没有CPU使用率;消息完成时会收到返回响应,并可调用预置的响应处理函数进行处理;容易扩展,只需增加消息类型和消息处理函数就可增加新功能;响应处理函数和发送函数设置条件标志,就可以将异步处理改为同步过程处理,实现方式简单,效率高,管理和维护容易,数据处理流程可以进行跟踪,可扩展性高,从而实现进程间的高效率协同工作。

下面对本发明实施例提供的进程间异步处理系统进行介绍,下文描述的进程间异步处理系统与上文描述的进程间异步处理方法可以相互参照。

参见图4,本发明实施例提供的一种基于IPC的进程间异步处理系统,包括:

接收模块100,用于接收第一消息结构体;所述第一消息结构体包括消息头和消息内容,所述消息头包括消息类型信息、消息回应信息和回应标识;

第一存入模块200,用于当所述消息回应信息为需要回应,则将与所述第一消息结构体对应的响应处理函数存入内部队列;

第一线程处理模块300,用于当第一线程接收所述第一消息结构体时,调用对应的处理函数进行处理,并生成第二消息结构体;所述第二消息结构体的回应标识为回应消息;

第二线程处理模块400,用于当第二线程接收所述第二消息结构体时,从所述内部队列获取对应的响应处理函数进行处理。

基于上述技术方案,本方案还包括:

第二存入模块,用于将与所述第一消息结构体对应的超时定时器存入定时器队列;

超时定时器处理模块,用于在所述第二线程接收所述第二消息结构体之后,从所述定时器队列获取对应的超时定时器,若所述超时定时器未超时,则关闭所述超时定时器;若所述超时定时器超时,则调用对应的超时函数进行处理。

基于上述技术方案,所述第一线程处理模块通过所述第一线程接收所述第一消息结构体,根据所述第一消息结构体的消息类型信息,从第一函数指针数组查询对应的处理函数进行处理。

基于上述技术方案,若第二线程处理模块判定所述第二线程接收的消息结构体中的回应标识不是回应消息,则根据所述消息结构体的消息类型信息,从第二函数指针数组查询对应的处理函数进行处理。

基于上述技术方案,本方案还包括:

扩展指令接收模块,用于接收处理函数扩展指令;

执行模块,用于根据所述处理函数扩展指令添加对应的处理函数,并更新所述第一函数指针数组和所述第二函数指针数组。

本发明实施例提供的一种基于IPC的进程间异步处理方法及系统,包括:接收第一消息结构体;所述第一消息结构体包括消息头和消息内容,所述消息头包括消息类型信息、消息回应信息和回应标识;若所述消息回应信息为需要回应,则将与所述第一消息结构体对应的响应处理函数存入内部队列;第一线程接收所述第一消息结构体,调用对应的处理函数进行处理,并生成第二消息结构体;所述第二消息结构体的回应标识为回应消息;第二线程接收所述第二消息结构体,从所述内部队列获取对应的响应处理函数进行处理;可见,在本方案中没有循环查询逻辑,无业务时没有CPU使用率,并且消息完成时会调用预置的响应处理函数进行处理,实现进程间的高效率协同工作。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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