一种流式文档解析的并行执行方法及系统

文档序号:763055 发布日期:2021-04-06 浏览:10次 >En<

阅读说明:本技术 一种流式文档解析的并行执行方法及系统 (Parallel execution method and system for streaming document analysis ) 是由 潘飚 殷博 袁春峰 于 2020-12-28 设计创作,主要内容包括:本发明公开了一种流式文档解析的并行执行方法及系统,该方法包括以下步骤:S1、接收文档并开始流式解析业务;S2、采用预设方法创建工作线程组;S3、通过获取数据包,查找协程上下文,实现工作线程到指定协程的切换;S4、切换到指定协程后,对报文进行解析;S5、完成对报文的处理,采用预设规则实现指定协程到工作线程的切换;S6、文档处理结束,对指定协程进行释放。有益效果:本发明将协程技术引入到流式解析中,由于协程的切换会自动恢复函数的调用堆栈,所以不需要复杂的上下文切换。而协程的切换在用户态完成,可以非常高效。同时可以根据需要确定执行协程的线程数量,所以可以充分利用系统的多核cpu资源。(The invention discloses a parallel execution method and a system for analyzing a streaming document, wherein the method comprises the following steps: s1, receiving the document and starting the stream analysis service; s2, creating a work thread group by adopting a preset method; s3, by acquiring the data packet, searching the coroutine context, and realizing the switching from the working thread to the appointed coroutine; s4, after switching to the appointed coordination, analyzing the message; s5, completing the processing of the message, and adopting a preset rule to realize the switching from the appointed coroutine to the working thread; and S6, ending the document processing and releasing the appointed coroutine. Has the advantages that: the invention introduces coroutine technology into the stream analysis, and complex context switching is not needed because the coroutine switching can automatically recover the call stack of the function. And the coroutine switching is completed in a user mode, so that the efficiency can be very high. Meanwhile, the number of threads for executing coroutines can be determined according to needs, so that multi-core CPU resources of the system can be fully utilized.)

一种流式文档解析的并行执行方法及系统

技术领域

本发明涉及文档解析技术领域,具体来说,涉及一种流式文档解析的并行执行方法及系统。

背景技术

在网络安全技术中,流量还原是一项基本的技术手段。而为了快速、实时地发现网络流量中的攻击、入侵、泄密等行为,对网络流量中的文件采用流式解析就成为一种必要手段:即在仅采集到文档的部分内容时就开始对文档进行解析。

流式文档解析虽然可以及时发现在网络中传输的文档内容,但也面临几方面的困难,其中一个困难就是:如何解决并发问题,网络中同时传输的文档可能在几百到几千个不等,而下一个来到报文属于哪个文档又是不确定的,如何简单、高效地处理这些文档,就成了一个必须面对的问题。

目前,主流的解决方案有两种:

1.多线程方式:为每个文档创建一个解析线程来处理,另外一个分发线程负责收取数据包,并将收到是数据包分发到正确的解析线程中。对于解析线程来说,只在一个文件的上下文中工作。这种方案的优点是实现简单,但缺点也很明显,占有资源多,不适合在大流量的网络环境。

2.单线程方式:只有一个线程负责解析文档,该线程记录所有文档的上下文信息,当收到一个数据包时再找到对应的上下文,恢复上下文环境,再进行后续的处理。这种方式的有点是节约资源,但编程相对复杂,同时不能充分利用系统的资源。

针对相关技术中的问题,目前尚未提出有效的解决方案。

发明内容

针对相关技术中的问题,本发明提出一种流式文档解析的并行执行方法及系统,以克服现有相关技术所存在的上述技术问题。

为此,本发明采用的具体技术方案如下:

根据本发明的一个方面,提供了一种流式文档解析的并行执行方法,该方法包括以下步骤:

S1、接收文档并开始流式解析业务;

S2、采用预设方法创建工作线程组;

S3、通过获取数据包,查找协程上下文,实现工作线程到指定协程的切换;

S4、切换到指定协程后,对报文进行解析;

S5、完成对报文的处理,采用预设规则实现指定协程到工作线程的切换;

S6、文档处理结束,对指定协程进行释放。

进一步的,所述预设方法为根据包括但不限于硬件配置或网络流量的因素,完成对线程组的数量的配置。

进一步的,所述通过获取数据包,查找协程上下文,完成工作线程到指定协程的切换还包括以下步骤:

S31、主线程从网络设备上读取数据包,当获取到一个数据包后,根据一定规则,将数据包分发到指定的工作线程;

S32、工作线程从自己的队列中获取数据包,并与文档内容进行对比,当文档内容已存在时,则根据连接的特性及文档的特征,对该文档的协程上下文进行查找处理,当接受的是新文档时,则利用系统创建一个新协程;

S33、通过查找或创建找到指定协程,并切换进入该指定协程。

进一步的,所述一定规则包括但不限于五元组规则、源IP地址及目的地址。

进一步的,所述利用系统创建一个新协程还包括以下步骤:

S321、为新协程分配堆栈资源;

S322、创建新的协程上下文。

进一步的,所述通过查找或创建找到指定协程,并切换进入该指定协程还包括以下步骤:

S331、保存当前协程的上下文;

S332、修改当前协程标识;

S333、切换堆栈指针;

S334、调用操作系统的swapcontext(交换上下文)函数进行用户上下文切换。

进一步的,所述预设规则包括以下步骤:

S51、当前的指定协程交出执行权;

S52、切换出当前协程,回到进入指定协程前的状态;

S53、等待下一次调度。

进一步的,所述文档处理结束,对指定协程进行释放还包括以下步骤:

S61、释放指定协程的资源;

S62、将指定协程从协程列表中移除。

进一步的,所述资源包括但不限于堆栈及上下文。

根据本发明的另一方面,还提供了一种流式文档解析的并行执行系统,该系统包括:

启动模块,用于接收文档并开始流式解析业务;

工作线程组模块,用于采用预设方法创建工作线程组;

协程切换模块,用于通过获取数据包,查找协程上下文,实现工作线程到指定协程的切换;

报文解析模块,用于切换到指定协程后,对报文进行解析;

工作线程切换模块,用于完成对报文的处理,采用预设规则实现指定协程到工作线程的切换;

协程释放模块,用于文档处理结束,对指定协程进行释放。

本发明的有益效果为:

1、本发明将协程技术引入到流式解析中,协程是一种轻量级的、用户态的协作组件,允许执行、挂起与恢复,它比子例程更一般和灵活,比线程更轻量级。且由于协程的切换会自动恢复函数的调用堆栈,所以不需要复杂的上下文切换。而协程的切换在用户态完成,可以非常高效。同时可以根据需要确定执行协程的线程数量,所以可以充分利用系统的多核cpu资源。解决了流式文档解析过程中文档上下文切换问题,使得并发解析多个文档的过程,和独立解析一个文件类似,从而大大简化了多文档并行处理时编程的复杂度。

2、本发明采用多线程与多协程的组合方式,既避免了单线程模式下资源利用率不高的问题,又避免了多线程模式下线程数量过多、线程切换开销过大的问题。

3、由于协程的创建、切换、销毁,都是在用户态完成,不涉及耗时的系统调用,所以协程的数量可以达到数万级甚至更多,而不会带来额外的性能损耗。同时协程的这种切换,应用层是感知不到的,所以应用层看上去像独立处理一个文档时一样,没有复杂的上下文切换、恢复等操作,大大降低了编程的复杂度。

附图说明

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

图1是根据本发明实施例的一种流式文档解析的并行执行方法的流程图;

图2是根据本发明实施例的一种流式文档解析的并行执行方法中协程流式文档解析结构示意图;

图3是根据本发明实施例的一种流式文档解析的并行执行系统的系统框图。

图中:

1、启动模块;2、工作线程组模块;3、协程切换模块;4、报文解析模块;5、工作线程切换模块;6、协程释放模块。

具体实施方式

为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。

根据本发明的实施例,提供了一种流式文档解析的并行执行方法及系统。

现结合附图和具体实施方式对本发明进一步说明,如图1-2所示,根据本发明实施例的流式文档解析的并行执行方法,该方法包括以下步骤:

S1、接收文档并开始流式解析业务;

S2、采用预设方法创建工作线程组;

其中,这些线程组负责解析功能的真正执行,线程一旦创建,则不再调整。创建工作线程组的方式,可以使用操作系统提供的线程创建方法(如linux下的pthread_create方法,windows平台下的CreateThread方法)。这些工作线程组执行相同的逻辑:循环从自己的消息队列中获取数据包,并调度合适的协程来完成数据包的解析,

S3、通过获取数据包,查找协程上下文,实现工作线程到指定协程的切换;

其中,工作线程从自己的队列中获取数据包主线程完成的工作和传统的包解析过程类似,这里的区别主要是:获取数据包之后,不是直接进行解析处理,而是分发到工作线程的消息对立中去。

S4、切换到指定协程后,对报文进行解析;

S5、完成对报文的处理,采用预设规则实现指定协程到工作线程的切换;

S6、文档处理结束,对指定协程进行释放。

在一个实施例中,所述预设方法为根据包括但不限于硬件配置或网络流量的因素,完成对线程组的数量的配置

在一个实施例中,所述通过获取数据包,查找协程上下文,完成工作线程到指定协程的切换还包括以下步骤:

S31、主线程从网络设备上读取数据包,当获取到一个数据包后,根据一定规则,将数据包分发到指定的工作线程;

S32、工作线程从自己的队列中获取数据包,并与文档内容进行对比,当文档内容已存在时,则根据连接的特性及文档的特征,对该文档的协程上下文进行查找处理,当接受的是新文档时,则利用系统创建一个新协程;

S33、通过查找或创建找到指定协程,并切换进入该指定协程。

在一个实施例中,所述一定规则包括但不限于五元组规则、源IP地址及目的地址。

在一个实施例中,所述利用系统创建一个新协程还包括以下步骤:

S321、为新协程分配堆栈资源;

S322、创建新的协程上下文。

在一个实施例中,所述通过查找或创建找到指定协程,并切换进入该指定协程还包括以下步骤:

S331、保存当前协程的上下文;

S332、修改当前协程标识;

S333、切换堆栈指针;

S334、调用操作系统的swapcontext(交换上下文)函数进行用户上下文切换。

在一个实施例中,所述预设规则包括以下步骤:

S51、当前的指定协程交出执行权;

S52、切换出当前协程,回到进入指定协程前的状态;

S53、等待下一次调度。

在一个实施例中,所述文档处理结束,对指定协程进行释放还包括以下步骤:

S61、释放指定协程的资源;

S62、将指定协程从协程列表中移除。

在一个实施例中,所述资源包括但不限于堆栈及上下文。

根据本发明的另一个实施例,如图所述,还提供了一种流式文档解析的并行执行系统,该系统包括:

启动模块1,用于接收文档并开始流式解析业务;

工作线程组模块5,用于采用预设方法创建工作线程组;

协程切换模块3,用于通过获取数据包,查找协程上下文,实现工作线程到指定协程的切换;

报文解析模块4,用于切换到指定协程后,对报文进行解析;

工作线程切换模块5,用于完成对报文的处理,采用预设规则实现指定协程到工作线程的切换;

协程释放模块6,用于文档处理结束,对指定协程进行释放。

综上所述,借助于本发明的上述技术方案,本发明将协程技术引入到流式解析中,由于协程的切换会自动恢复函数的调用堆栈,所以不需要复杂的上下文切换。而协程的切换在用户态完成,可以非常高效。同时可以根据需要确定执行协程的线程数量,所以可以充分利用系统的多核cpu资源。解决了流式文档解析过程中文档上下文切换问题,使得并发解析多个文档的过程,和独立解析一个文件类似,从而大大简化了多文档并行处理时编程的复杂度。本发明采用多线程与多协程的组合方式,既避免了单线程模式下资源利用率不高的问题,又避免了多线程模式下线程数量过多、线程切换开销过大的问题。由于协程的创建、切换、销毁,都是在用户态完成,不涉及耗时的系统调用,所以协程的数量可以达到数万级甚至更多,而不会带来额外的性能损耗。同时协程的这种切换,应用层是感知不到的,所以应用层看上去像独立处理一个文档时一样,没有复杂的上下文切换、恢复等操作,大大降低了编程的复杂度。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

10页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:PDF文档转成DXF文档的方法、系统及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!