流程引擎的指令调度方法及装置与流程

文档序号:12596625阅读:205来源:国知局
流程引擎的指令调度方法及装置与流程

本公开涉及计算机领域,具体地,涉及一种流程引擎的指令调度方法及装置。



背景技术:

随着企业信息化的快速发展,业务流程管理(Business Process Management,简称BPM)在信息化过程中的作用越来越突出。流程引擎是一种计算机化的标识模型,是能够完全或者部分自动执行经营过程的有限状态机,其作用是根据一系列过程规则,文档、信息或任务在不同的执行者之间进行传递与执行。

流程引擎有很多操作指令,有的操作较为复杂,有的操作相对简单,由于现有引擎都是一个线程池,引擎会不加区分的获取一个线程,然后按照不同的指令进行解释执行,这会导致如果有大量的复杂操作且在高并发情况下,流程引擎的线程池长时间占用无法释放,流程引擎无法响应更多的服务请求。另外由于执行周期过长,无法有效定位性能瓶颈点,从而不能有针对性的解决某个长逻辑的性能问题。



技术实现要素:

本公开的目的是提供一种流程引擎的指令调度方法及装置,用于解决由于现有的流程引擎只存在一个线程池中,流程引擎操作复杂导致线程资源长时间得不到释放,无法响应更多引擎操作的问题。

为了实现上述目的,本公开提供一种流程引擎的指令调度方法,所述流程引擎包括多个子线程池,所述指令调度方法包括:

将输入的流程指令解析为多个子操作指令;

根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中;

控制所述当前子线程池分配线程,以执行所述当前子操作指令;

在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程;

将下一个所述子操作指令分配到对应的所述子线程池中以执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

可选地,所述流程引擎还包括与所述子线程池一一对应的子操作缓冲池;

所述将当前子操作指令分配到对应的当前子线程池中,包括:

将所述当前子操作指令分配到所述当前子线程池对应所述子操作缓冲池中;

在执行所述当前子操作指令时,将所述当前子操作指令从对应的所述子操作缓冲池分配到所述当前子线程池中。

可选地,所述在所述当前子操作指令执行完毕后,所述指令调度方法还包括:确定下一个所述子操作指令所对应的所述子操作缓冲池。

可选地,所述流程引擎还包括多级实例对象;

所述将输入的流程指令解析为多个子操作指令,包括:

将所述流程指令分解为所述多级实例对象所对应的所述子操作指令。

可选地,所述控制当前子操作指令所对应的当前子线程池分配线程之前,所述指令调度方法还包括:

将所述多级实例对象所对应的所述子操作指令串联起来,形成逻辑链条;

根据所述逻辑链条,确定所述子操作指令的先后顺序。

可选地,所述指令调度方法还包括:

在执行所述当前子操作指令时,监控所述当前子线程池中是否有空闲状态线程;

当所述当前子线程池中有所述空闲状态线程时,释放所述空闲状态线程。

本公开还提供了一种流程引擎的指令调度装置,所述流程引擎包括多个子线程池,所述指令调度装置包括:

解析模块,用于将输入的流程指令解析为多个子操作指令;

分配模块,用于根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中;

控制模块,用于控制所述当前子线程池分配线程,以执行所述当前子操作指令;

第一释放模块,用于在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程;

执行模块,用于将下一个所述子操作指令分配到对应的所述子线程池中以执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

可选地,所述流程引擎还包括与所述子线程池一一对应的子操作缓冲池;

所述分配模块包括:

第一分配子模块,用于将所述当前子操作指令分配到所述当前子线程池对应所述子操作缓冲池中;

第二分配子模块,用于在执行所述当前子操作指令时,将所述当前子操作指令从对应的所述子操作缓冲池分配到所述当前子线程池中。

可选地,所述指令调度装置还包括:第一确定模块,用于在所述当前子操作指令执行完毕后,确定下一个所述子操作指令所对应的所述子操作缓冲池。

可选地,所述流程引擎还包括多级实例对象;

所述解析模块用于将所述流程指令分解为所述多级实例对象所对应的所述子操作指令。

可选地,所述指令调度装置还包括:

串联模块,用于将所述多级实例对象所对应的所述子操作指令串联起来,形成逻辑链条;

第二确定模块,用于根据所述逻辑链条,确定所述子操作指令的先后顺序。

可选地,所述指令调度装置还包括:

监控模块,用于在执行所述当前子操作指令时,监控所述当前子线程池中是否有空闲状态线程;

第二释放模块,用于当所述当前子线程池中有空闲状态线程时,释放所述空闲状态线程。

本公开的实施例提供的技术方案可以包括以下有益效果:

本公开通过将解析后的多个子操作指令,根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中,并控制所述当前子线程池分配线程,以执行所述当前子操作指令,以及在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程。因此,每执行一个子操作指令后,分配给该子操作指令的所述线程就会被释放,以供其它的流程指令使用,提高了流程引擎的工作效率,解决了由于现有的流程引擎只存在一个线程池中,流程引擎操作复杂导致线程资源长时间得不到释放,无法响应更多引擎操作的问题。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据一示例性实施例示出的一种流程引擎的指令调度方法的流程图。

图2是根据一示例性实施例示出的一种流程引擎的指令调度方法包括的步骤中将子操作指令分配到子线程池的流程图。

图3是根据一示例性实施例示出的一种流程引擎的指令调度方法的另一流程图。

图4是根据一示例性实施例示出的一种流程引擎的指令调度方法的另一流程图。

图5是根据一示例性实施例示出的一种流程引擎的指令调度方法的示意图。

图6是根据一示例性实施例示出的一种流程引擎的指令调度装置的框图。

图7是根据一示例性实施例示出的一种流程引擎的指令调度装置的分配模块的框图。

图8是根据一示例性实施例示出的一种流程引擎的指令调度装置的另一框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

图1是根据一示例性实施例示出的一种流程引擎的指令调度方法的流程图,所述流程引擎包括多个子线程池,如图1所示,流程引擎的指令调度方法包括以下步骤。

在步骤S11中,将输入的流程指令解析为多个子操作指令。

在步骤S12中,根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中;所述当前子操作指令为当前执行的所述子操作指令。

在步骤S13中,控制所述当前子线程池分配线程,以执行所述当前子操作指令。

在步骤S14中,在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程。

在步骤S15中,将下一个所述子操作指令分配到对应的所述子线程池中以执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

本公开流程引擎的指令调度方法可以用在电子设备中,所述电子设备可能是笔记本电脑、智能手机、智能手表、平板电脑等。

所述流程指令是由可以枚举的一组子操作指令组装而来,当用户通过操作所述电子设备使得所述流程引擎接收所述流程指令时,执行步骤S11,将所述流程指令解析为多个子操作指令。接收所述流程指令后,所述流程引擎去执行所述流程指令所指示的相关引擎操作,将引擎操作进行分解成一个个的子操作。

当所述流程指令被解析成多个子操作指令后,执行步骤S12,根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中。所述当前子操作指令为当前需要执行的所述子操作指令。相比于现有的只有一个线程池的流程引擎,本公开的流程引擎包括了多个子线程池。所述流程引擎包括的所述子线程池数大于或等于一个流程指令所包括的子操作指令数,即所述流程引擎包括的所述子线程池对应于所有可能的子操作指令,每一个所述子操作指令分配一个不同的所述子线程池。其中,本公开的所述流程引擎所包括的子线程池可通过以下方式进行设置:首先,在执行步骤S11之前,将所有可能的流程引擎指令分解为若干个相互独立的子操作指令(此处子操作指令为全集,即包括了所有可能的子操作指令);接着,根据所述子操作指令的类型建立与所述子操作指令一一对应的子线程池。

举例来讲,流程引擎包括子线程池A、子线程池B、子线程池C和子线程池D,流程指令甲包括子操作指令a和子操作指令c。输入所述流程指令甲后,首先,将所述流程指令甲分解为子操作指令a和子操作指令c;然后,假设子操作指令a先执行,则先将子操作指令a放入对应的子线程池A中,当所述子操作指令a执行完毕后,再将子操作指令c放入对应的子线程池C中。

当所述前子操作指令分配到所述当前子线程池后,执行步骤S13,控制所述当前子线程池分配线程,以执行所述当前子操作指令。所述流程指令解析后的多个子操作指令直接具有先后的逻辑顺序,根据所述逻辑顺序,所述当前子操作指令在被执行时,所述当前子线程池分配线程给所述当前子操作指令去执行。在所述当前子操作指令执行完毕后,执行步骤S14,释放所述当前子线程池分配的所述线程。在释放所述线程后,执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

举例来讲,流程引擎包括子线程池A、子线程池B、子线程池C和子线程池D,流程指令甲包括子操作指令a和子操作指令c,假设先执行子操作指令a,后执行子操作指令c。输入所述流程指令甲后,首先,将所述流程指令甲分解为子操作指令a和子操作指令c;然后,将子操作指令a放入对应的子线程池A中;接着,子线程池A分配线程给子操作指令a,当子操作指令a执行完毕后,释放子线程池A分配的线程;然后,将子操作指令c放入对应的子线程池C中;接着,子线程池C分配线程给子操作指令c,当子操作指令c执行完毕后,释放子线程池C分配的线程。

当流程引擎接收包括了子操作指令a和子操作指令b的流程指令乙时,由于当所述流程指令甲的子操作指令a执行完毕后,释放了子线程池A分配的线程,此时,子线程池A和子线程池B处于可以使用状态,即流程引擎可以在处理流程指令甲的过程中,同时处理流程指令乙,提高了流程引擎的工作效率。

本公开通过将解析后的多个子操作指令,根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中,并控制所述当前子线程池分配线程,以执行所述当前子操作指令,以及在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程。因此,每执行一个子操作指令后,分配给该子操作指令的所述线程就会被释放,以供其它的流程指令使用,提高了流程引擎的工作效率,解决了由于现有的流程引擎只存在一个线程池中,流程引擎操作复杂导致线程资源长时间得不到释放,无法响应更多引擎操作的问题。

图2是根据一示例性实施例示出的一种流程引擎的指令调度方法包括的步骤中将当前子操作指令分配到对应的当前子线程池中的流程图。如图2所示,所述流程引擎还包括与所述子线程池一一对应的子操作缓冲池;所述将当前子操作指令分配到对应的当前子线程池中,可以包括以下步骤。

在步骤S121中,将所述当前子操作指令分配到所述当前子线程池对应所述子操作缓冲池中;

在步骤S122中,在执行所述当前子操作指令时,将所述当前子操作指令从对应的所述子操作缓冲池分配到所述当前子线程池中。

所述流程引擎除了包括多个子线程池外,还包括与所述子线程池一一对应的子操作缓冲池。输入的流程指令解析为多个子操作指令后,首先,根据执行所述子操作指令的先后顺序,将所述当前子操作指令分配到所述当前子线程池对应所述子操作缓冲池中;接着,在所述当前子操作指令需要被执行时,将所述当前子操作指令所在的子操作缓冲池提取出来,并放入当前子线程池中;然后,当前子线程池分配线程给所述当前子操作指令去执行;接着,在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的线程。可选地,在释放所述当前子线程池分配的线程后,根据执行所述子操作指令的先后顺序,确定下一个所述子操作指令所对应的所述子操作缓冲池;然后,将下一个所述子操作指令放入对应的所述子操作缓冲池。

图3是根据一示例性实施例示出的一种流程引擎的指令调度方法的另一流程图。如图3所示,所述流程引擎还包括多级实例对象,流程引擎的指令调度方法可以包括以下步骤。

在步骤S21中,将所述流程指令分解为所述多级实例对象所对应的所述子操作指令。

在步骤S22中,将所述多级实例对象所对应的所述子操作指令串联起来,形成逻辑链条。

在步骤S23中,根据所述逻辑链条,确定所述子操作指令的先后顺序。

在步骤S24中,根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中。

在步骤S25中,控制所述当前子线程池分配线程,以执行所述当前子操作指令。

在步骤S26中,在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程。

在步骤S27中,将下一个所述子操作指令分配到对应的所述子线程池中以执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

本公开的流程引擎可以包括三级实例对象,所述三级实例对象可以包括:流程实例对象、节点实例对象和工作项对象。每一级实例对象包括了多个子操作,即所述流程指令所包括的多个子操作指令都能对应于实例对象的子操作。当一个流程指令到达之后,所述流程引擎将这三个实例对象的不同子操作所对应的子操作指令串联起来,形成一个逻辑链条。根据所述逻辑链条,就可以确定执行所述子操作指令的先后顺序。通过将原本复杂的流程操作分解成不同实例对象的不同子操作所对应的子操作指令,起到了流程引擎解耦的作用。

图4是根据一示例性实施例示出的一种流程引擎的指令调度方法的另一流程图。如图4所示,流程引擎的指令调度方法可以包括以下步骤。

在步骤S31中,将输入的流程指令解析为多个子操作指令。

在步骤S32中,根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中。

在步骤S33中,控制所述当前子线程池分配线程,以执行所述当前子操作指令。

在步骤S34中,在执行所述当前子操作指令时,监控所述当前子线程池中是否有空闲状态线程。

在步骤S35中,当所述当前子线程池中有所述空闲状态线程时,释放所述空闲状态线程。

在步骤S36中,在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程。

在步骤S37中,执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

本公开通过将引擎操作进行分解成一个个的子操作,然后按照执行顺序进行排序,每个子操作都会有一个独立的子线程池,每个子线程池根据当前子操作的复杂度配置不同的线程数,使得每个子操作执行的周期缩短,能够有效定位性能瓶颈点,进而能有针对性的解决某个长逻辑的性能问题。在当前子线程池中有空闲状态线程时,即当前子操作指令并不需要占用当前子线程池中的所有线程,因此,可以通过释放所述空闲状态线程给其它的流程指令使用,进一步提高了流程引擎的工作效率。

接下来,举一个完整的例子来描述本公开的流程引擎的指令调度方法。请参考图5,图5是根据一示例性实施例示出的一种流程引擎的指令调度方法的示意图。

如图5所示,首先,流程指令输入到流程引擎中,流程引擎将输入的流程指令解析为N个子操作指令;

接着,根据执行所述子操作指令的先后顺序,先执行子操作指令1时,流程引擎将子操作指令1放入子操作缓冲池1中;

然后,将子操作指令1从子操作缓冲池1中提取出来,子线程池1分配线程给子操作指令1去执行;

接着,当子操作指令1执行完毕后,释放子线程池1分配的所述线程;

然后,确定下一个子操作指令所对应的缓冲池,即确定子操作指令2所对应的子操作缓冲池2;

接着,将子操作指令2放入子操作缓冲池2中;

然后,将子操作指令2从子操作缓冲池2中提取出来,子线程池2分配线程给子操作指令2去执行;

接着,重复上述子操作指令从子操作缓冲池提取出来以执行的步骤,直至子操作指令N执行完毕后,输出所述流程指令。

图6是根据一示例性实施例示出的一种流程引擎的指令调度装置的框图。参照图6,该指令调度装置600包括解析模块601、分配模块602、控制模块603、第一释放模块604和执行模块605。

解析模块601,用于将输入的流程指令解析为多个子操作指令;

分配模块602,用于根据执行所述子操作指令的先后顺序,将当前子操作指令分配到对应的当前子线程池中;所述当前子操作指令为当前执行的所述子操作指令;

控制模块603,用于控制所述当前子线程池分配线程,以执行所述当前子操作指令;

第一释放模块604,用于在所述当前子操作指令执行完毕后,释放所述当前子线程池分配的所述线程;

执行模块605,用于将下一个所述子操作指令分配到对应的所述子线程池中以执行下一个所述子操作指令,直至所有的所述子操作指令执行完毕。

可选地,所述流程引擎还包括与所述子线程池一一对应的子操作缓冲池。如图7所示,所述分配模块602包括:

第一分配子模块6021,用于将所述当前子操作指令分配到所述当前子线程池对应所述子操作缓冲池中;

第二分配子模块6022,用于在执行所述当前子操作指令时,将所述当前子操作指令从对应的所述子操作缓冲池分配到的所述当前子线程池中。

可选地,如图8所示,所述指令调度装置600除包括解析模块601、分配模块602、控制模块603、第一释放模块604和执行模块605外,还可以包括:

第一确定模块610,用于在所述当前子操作指令执行完毕后,确定下一个所述子操作指令所对应的所述子操作缓冲池。

可选地,所述流程引擎还包括多级实例对象;所述解析模块用于将所述流程指令分解为所述多级实例对象所对应的所述子操作指令。

可选地,如图8所示,所述指令调度装置600除包括解析模块601、分配模块602、控制模块603、第一释放模块604、执行模块605和第一确定模块610外,还可以包括:

串联模块606,用于将所述多级实例对象所对应的所述子操作指令串联起来,形成逻辑链条;

第二确定模块607,用于根据所述逻辑链条,确定所述子操作指令的先后顺序。

可选地,如图8所示,所述指令调度装置600除包括解析模块601、分配模块602、控制模块603、第一释放模块604、执行模块605、第一确定模块610、串联模块606和第二确定模块607外,还可以包括:

监控模块608,用于在执行所述当前子操作指令时,监控所述当前子线程池中是否有空闲状态线程;

第二释放模块609,用于当所述当前子线程池中有所述空闲状态线程时,释放所述空闲状态线程。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

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