执行体及其数据处理方法转让专利

申请号 : CN202010090343.7

文献号 : CN110955511B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 牛冲柳俊丞袁进辉成诚李新奇蔡晟航张文骁姜雪飞

申请人 : 北京一流科技有限公司

摘要 :

本公开提供了一种执行体,包括部署在CPU上的上游消息发送/接收单元和下游消息发送/接收单元的消息仓、有限状态机以及任务插入组件以及部署在外部设备或CPU本地的任务处理组件,每个任务处理组件包括数据运算单元以及与一个或多个输出数据缓存,其中有限状态机基于所接收到的消息以及发送消息而改变状态;所述任务插入组件在预定条件时将具体任务或附有回调事件的具体任务排列其所属的任务流中以及同时向部署在CPU上的用于控制任务流并行的回调线程组件插入回调任务;以及所述运算单元在任务顺序到来时读取上游数据并执行预定的操作,并将结果数据存储在所述执行体的输出数据缓存中。

权利要求 :

1.一种执行体,其处于一种执行体网络中,与上游执行体和/或下游执行体进行数据通信,所述执行体包括部署在CPU上的上游消息发送/接收单元和下游消息发送/接收单元的消息仓、有限状态机以及任务插入组件以及部署在外部设备或CPU本地的任务处理组件,每个任务处理组件包括数据运算单元以及与一个或多个输出数据缓存,其中所述有限状态机基于消息仓中所接收到的消息以及发送消息而改变执行体的当前状态;

所述任务插入组件在有限状态机处于预定条件的状态时,如果触发所述预定条件的各个消息所属的上游执行体和/或下游执行体所属的任务流与所述执行体所属的任务流相同,则只将所述执行体的具体任务排列在其所属的任务流中并向其对应的任务处理组件发出运算指令,并且所述消息仓立即向触发所述预定条件的所有消息所属的上游和/或下游执行体发送消息;如果触发预定条件的任何消息之一所属的执行体所属的任务流与所述执行体所属的任务流不相同,则将其后附有回调事件的具体任务排列其所属的任务流中以及同时向部署在CPU上的用于控制任务流并行的回调线程组件插入回调任务,并向其对应的任务处理组件发出运算指令;以及所述运算单元在所述任务流中被指派给自身的任务顺序到来时读取上游执行体所对应输出数据缓存中的数据并执行预定的操作,并将执行操作后的结果数据存储在所述执行体的输出数据缓存中。

2.根据权利要求1所述的执行体,其中,

所述有限状态机的预定条件的状态包括一个或多个满足上游部分预定条件的第一上游状态和满足上游完全预定条件的第二上游状态,所述任务插入组件将所述执行体的针对触发所述一个或多个第一上游状态之一的或触发所述第二上游状态的上游执行体之一的具体任务排列在其所属的任务流中;以及所述消息仓在有限状态机处于一个或多个第一上游状态之一时,只由上游消息发送/接收单元向触发所述一个或多个第一上游状态之一的上游执行体发送消息,以及只有在有限状态机处于第二上游状态时下游消息发送/接收单元才向下游执行体发送消息以及上游消息发送/接收单元向触发所述第二上游状态的上游执行体发送消息。

3.根据权利要求1所述的执行体,其中所述执行体的输出数据缓存之一为其上游执行体之一的输出数据缓存之一,并且只有在有限状态机的处于接收到所述执行体的所述输出数据缓存之一的所有下游执行体的反馈消息的预定条件的第三下游状态时,所述执行体的消息仓的上游消息发送/接收单元才向所述上游执行体发送消息。

4.根据权利要求1所述的执行体,其中

所述有限状态机的预定条件的状态包括满足一个或多个下游部分预定条件的第四下游状态和满足下游完全预定条件的第五下游状态;以及

所述任务插入组件在有限状态机处于所述一个或多个第四下游状态之一时将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有下游消息发送/接收单元立即向下游执行体发送消息,以及所述消息仓的上游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第五下游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向上游执行体发送消息。

5.根据权利要求1所述的执行体,其中

所述有限状态机的预定条件的状态包括满足一个或多个上游部分预定条件的第六上游状态和满足上游完全预定条件的第七上游状态;以及

所述任务插入组件在有限状态机处于所述一个或多个第六上游状态之一时将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有上游消息发送/接收单元立即向上游执行体发送消息,以及所述消息仓的下游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第七上游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向下游执行体发送消息并且上游消息发送/接收单元也立即向上游执行体发送消息。

6.一种在执行体网络中进行数据处理的方法,所述执行体网络中的执行体与其上游执行体和/或下游执行体进行数据通信,所述执行体包括部署在CPU上的上游消息发送/接收单元和下游消息发送/接收单元的消息仓、有限状态机以及任务插入组件以及部署在外部设备或CPU本地的任务处理组件,每个任务处理组件包括数据运算单元以及与一个或多个输出数据缓存,所述方法包括:基于消息仓中所接收到的消息以及发送消息,所述有限状态机改变执行体的当前状态;

在有限状态机处于预定条件的状态时,如果触发所述预定条件的各个消息所属的上游执行体和/或下游执行体所属的任务流与所述执行体所属的任务流相同,则所述任务插入组件只将所述执行体的具体任务排列在其所属的任务流中并向其对应的任务处理组件发出运算指令,并且所述消息仓立即向触发所述预定条件的所有消息所属的上游和/或下游执行体发送消息,如果触发预定条件的任何消息之一所属的执行体所属的任务流与所述执行体所属的任务流不相同,则所述任务插入组件将其后附有回调事件的具体任务排列其所属的任务流中以及同时向部署在CPU上的用于控制任务流并行的回调线程组件插入回调任务,并向其对应的任务处理组件发出运算指令;以及所述运算单元在所述任务流中被指派给自身的任务顺序到来时读取上游执行体所对应输出数据缓存中的数据并执行预定的操作,并将执行操作后的结果数据存储在所述执行体的输出数据缓存中。

7.根据权利要求6所述的在执行体网络中进行数据处理的方法,还包括:

在所述有限状态机的预定条件的状态为一个或多个满足上游部分预定条件的第一上游状态之一或满足上游完全预定条件的第二上游状态时,所述任务插入组件将所述执行体的针对触发所述一个或多个第一上游状态之一的或触发所述第二上游状态的上游执行体之一的具体任务排列在其所属的任务流中,以及只由上游消息发送/接收单元向触发所述一个或多个第一上游状态之一的上游执行体之一发送消息;以及在所述有限状态机处于满足上游完全预定条件的第二上游状态时,下游消息发送/接收单元才向下游执行体发送消息以及上游消息发送/接收单元向触发所述第二上游状态的上游执行体之一发送消息。

8.根据权利要求6所述的在执行体网络中进行数据处理的方法,其中所述执行体的输出数据缓存之一为其上游执行体之一的输出数据缓存之一,并且还包括:只有在有限状态机的处于接收到所述执行体的所述输出数据缓存之一的所有下游执行体的反馈消息的预定条件的第三下游状态时,所述执行体的消息仓的上游消息发送/接收单元才向所述上游执行体之一发送消息。

9.根据权利要求6所述的在执行体网络中进行数据处理的方法,其还包括:

在所述有限状态机的预定条件的状态为满足一个或多个下游部分预定条件的第四下游状态之一时,所述任务插入组件将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有下游消息发送/接收单元立即向下游执行体发送消息;以及在所述有限状态机的预定条件的状态为满足下游完全预定条件的第五下游状态时,所述消息仓的上游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第五下游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向上游执行体发送消息。

10.根据权利要求6所述的在执行体网络中进行数据处理的方法,其还包括在所述有限状态机的预定条件的状态为满足一个或多个上游部分预定条件的第六上游状态时,所述任务插入组件将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有上游消息发送/接收单元立即向上游执行体发送消息;以及在所述有限状态机的预定条件的状态为满足上游完全预定条件的第七上游状态时,所述消息仓的下游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第七上游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向下游执行体发送消息并且上游消息发送/接收单元也立即向上游执行体发送消息。

说明书 :

执行体及其数据处理方法

技术领域

[0001] 本公开涉及一种数据处理技术。更具体地说,本公开涉及一种用于异构架构的静态分布式数据处理系统中的数据执行体以及其数据处理方法。

背景技术

[0002] 在静态分布式数据处理系统中,数据处理系统基于用户对作业的描述,将计算任务分解成多个小的计算任务部署到整个数据处理系统中的各个计算设备上,并通过各个计算设备上创建的数据执行体来基于彼此之间的关系在数据处理路径中按照预定的时序完成指定的数据处理,并最终实现作业处理要求。通过将执行体编入指定的CPU线程后,执行体之间可以按照彼此的上下游关系和时序按序执行,因此,整个数据处理系统并不需要进行中心调度,从而消除了调度开销。尤其是当大量执行体的任务处理组件布置在同一计算设备上时,能够消除对设备间数据通信的开销。
[0003] 然而,这种处于同一数据处理路径中的上下游执行体需要上游执行体等待其下游执行体使用完其所产生的数据之后,才能后开始进行将任务插入任务流中的操作,这会极大地占用CPU线程运行时间,导致线程运行的堵塞,降低了线程的运行效率。
[0004] 因此,人们期望获得一种用于异构架构的数据处理系统的数据执行体,其能够消除上述现有技术中的一种或多种技术问题,显著降低执行体在数据处理系统将任务插入任务流的等待时间,提高CPU线程的运行效率。

发明内容

[0005] 本公开的目的在于提供一种解决至少上述问题,具体而言,本公开在数据处理系统中创建一种执行体,其在数据处理过程中,将所有数据执行体所要执行的任务按照其所属任务流,按照执行体的时序顺序插入所属的任务流中,以便被分配执行该任务流的计算设备按照顺序执行数据处理任务,从而消除了执行体所属的CPU线程的等待时间,提高CPU线程的运行效率。
[0006] 根据本公开的一个方面,提供了一种执行体,其处于一种执行体网络中,与上游执行体和/或下游执行体进行数据通信,所述执行体包括部署在CPU上的上游消息发送/接收单元和下游消息发送/接收单元的消息仓、有限状态机以及任务插入组件以及部署在外部设备或CPU本地的任务处理组件,每个任务处理组件包括数据运算单元以及与一个或多个输出数据缓存,其中所述有限状态机基于消息仓中所接收到的消息以及发送消息而改变执行体的当前状态;所述任务插入组件在有限状态机处于预定条件的状态时,如果触发所述预定条件的各个消息所属的上游执行体和/或下游执行体所属的任务流与所述执行体所属的任务流相同,则只将所述执行体的具体任务排列在其所属的任务流中并向其对应的任务处理组件发出运算指令,并且所述消息仓立即向触发所述预定条件的所有消息所属的上游和/或下游执行体发送消息,如果触发预定条件的任何消息之一所属的执行体所属的任务流与所述执行体所属的任务流不相同,则将其后附有回调事件的具体任务排列其所属的任务流中以及同时向部署在CPU上的用于控制任务流并行的回调线程组件插入回调任务,并向其对应的任务处理组件发出运算指令;所述运算单元在所述任务流中被指派给自身的任务顺序到来时读取上游执行体所对应输出数据缓存中的数据并执行预定的操作,并将执行操作后的结果数据存储在所述执行体的输出数据缓存中。
[0007] 根据本公开的执行体,其中所述有限状态机的预定条件的状态包括一个或多个满足上游部分预定条件的第一上游状态和满足上游完全预定条件的第二上游状态,所述任务插入组件将所述执行体的针对触发所述一个或多个第一上游状态之一的或触发所述第二上游状态的上游执行体之一的具体任务排列在其所属的任务流中;以及所述消息仓在有限状态机处于一个或多个第一上游状态之一时,只由上游消息发送/接收单元向触发所述一个或多个第一上游状态之一的上游执行体之一发送消息,以及只有在有限状态机处于第二上游状态时下游消息发送/接收单元才向下游执行体发送消息以及上游消息发送/接收单元向触发所述第二上游状态的上游执行体之一发送消息。
[0008] 根据本公开的执行体,其中所述执行体的输出数据缓存之一为其上游执行体之一的输出数据缓存之一,并且只有在有限状态机的处于接收到所述执行体的所述输出数据缓存之一的所有下游执行体的反馈消息的预定条件的第三下游状态时,所述执行体的消息仓的上游消息发送/接收单元才向所述上游执行体之一发送消息。
[0009] 根据本公开的执行体,其中所述有限状态机的预定条件的状态包括满足一个或多个下游部分预定条件的第四下游状态和满足下游完全预定条件的第五下游状态;以及所述任务插入组件在有限状态机处于所述一个或多个第四下游状态之一时将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有下游消息发送/接收单元立即向下游执行体发送消息,以及所述消息仓的上游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第五下游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向上游执行体发送消息。
[0010] 根据本公开的执行体,其中所述有限状态机的预定条件的状态包括满足一个或多个上游部分预定条件的第六上游状态和满足上游完全预定条件的第七上游状态;以及所述任务插入组件在有限状态机处于所述一个或多个第六上游状态之一时将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有上游消息发送/接收单元立即向上游执行体发送消息,以及所述消息仓的下游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第七上游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向下游执行体发送消息并且上游消息发送/接收单元也立即向上游执行体发送消息。
[0011] 根据本公开的另一个方面,提供了一种在执行体网络中进行数据处理的方法,所述执行体网络中的执行体与其上游执行体和/或下游执行体进行数据通信,所述执行体包括部署在CPU上的上游消息发送/接收单元和下游消息发送/接收单元的消息仓、有限状态机以及任务插入组件以及部署在外部设备或CPU本地的任务处理组件,每个任务处理组件包括数据运算单元以及与一个或多个输出数据缓存,所述方法包括:基于消息仓中所接收到的消息以及发送消息,所述有限状态机改变执行体的当前状态;在有限状态机处于预定条件的状态时,如果触发所述预定条件的各个消息所属的上游执行体和/或下游执行体所属的任务流与所述执行体所属的任务流相同,则所述任务插入组件只将所述执行体的具体任务排列在其所属的任务流中并向其对应的任务处理组件发出运算指令,并且所述消息仓立即向触发所述预定条件的所有消息所属的上游和/或下游执行体发送消息,如果触发预定条件的任何消息之一所属的执行体所属的任务流与所述执行体所属的任务流不相同,则所述任务插入组件将其后附有回调事件的具体任务排列其所属的任务流中以及同时向部署在CPU上的用于控制任务流并行的回调线程组件插入回调任务,并向其对应的任务处理组件发出运算指令;以及所述运算单元在所述任务流中被指派给自身的任务顺序到来时读取上游执行体所对应输出数据缓存中的数据并执行预定的操作,并将执行操作后的结果数据存储在所述执行体的输出数据缓存中。
[0012] 根据本公开的在执行体网络中进行数据处理的方法,还包括:在所述有限状态机的预定条件的状态为一个或多个满足上游部分预定条件的第一上游状态之一或满足上游完全预定条件的第二上游状态时,所述任务插入组件将所述执行体的针对触发所述一个或多个第一上游状态之一的或触发所述第二上游状态的上游执行体之一的具体任务排列在其所属的任务流中,以及只由上游消息发送/接收单元向触发所述一个或多个第一上游状态之一的上游执行体发送消息;以及在所述有限状态机处于满足上游完全预定条件的第二上游状态时,下游消息发送/接收单元才向下游执行体发送消息以及上游消息发送/接收单元向触发所述第二上游状态的上游执行体发送消息。
[0013] 根据本公开的在执行体网络中进行数据处理的方法,其中所述执行体的输出数据缓存之一为其上游执行体之一的输出数据缓存之一,并且还包括:只有在有限状态机的处于接收到所述执行体的所述输出数据缓存之一的所有下游执行体的反馈消息的预定条件的第三下游状态时,所述执行体的消息仓的上游消息发送/接收单元才向所述上游执行体发送消息。
[0014] 根据本公开的在执行体网络中进行数据处理的方法,其还包括:在所述有限状态机的预定条件的状态为满足一个或多个下游部分预定条件的第四下游状态之一时,所述任务插入组件将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有下游消息发送/接收单元立即向下游执行体发送消息;以及在所述有限状态机的预定条件的状态为满足下游完全预定条件的第五下游状态时,所述消息仓的上游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第五下游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向上游执行体发送消息。
[0015] 根据本公开的在执行体网络中进行数据处理的方法,其还包括:在所述有限状态机的预定条件的状态为满足一个或多个上游部分预定条件的第六上游状态时,所述任务插入组件将所述执行体的具体任务排列在其所属的任务流中并且所述消息仓只有上游消息发送/接收单元立即向上游执行体发送消息;以及在所述有限状态机的预定条件的状态为满足上游完全预定条件的第七上游状态时,所述消息仓的下游消息发送/接收单元直到所述任务插入组件在有限状态机处于所述第七上游状态而将所述执行体的具体任务排列在其所属的任务流中时才立即向下游执行体发送消息并且上游消息发送/接收单元也立即向上游执行体发送消息。
[0016] 由于采用根据本公开的数据执行体,使得处于同一任务流或其任务处理组件被部署在同一计算设备上的执行体按照指定时序在规定的CPU线程下按序操作时,不需要等待任务处理组件实际执行完毕即可完成在CPU线程上的任务插入操作,从而极大缩短了执行体对CPU线程的占用时间,也极大地提高了在静态分布计算环境下CPU线程的运行效率,从而使得CPU能够有更多的资源用于CPU其他的任务。
[0017] 此外,由于本公开的数据执行体能够根据自身的不同状态进行操作,因此能够通过一个执行体实现常规多个执行体所能实现的功能,从而减少了计算环境中执行体的数量,简化了任务拓扑图的复杂程度。
[0018] 本公开的其它优点、目标和特征的一部分将通过下面的说明得以体现,另一部分将通过对本公开的研究和实践而为本领域的技术人员所理解。

附图说明

[0019] 图1所示的是根据本公开的用静态分布式数据处理系统的基本执行体的第一实施例的结构示意图。
[0020] 图2所示的是根据本公开的用静态分布式数据处理系统的基本执行体的第二实施例的结构示意图。
[0021] 图3所示的是根据本公开的第三实施例的执行体100的原理结构图。
[0022] 图4所示的是根据本公开的第四实施例的执行体100的原理结构图。
[0023] 图5所示的是根据本公开的第五实施例的执行体100的原理结构图。
[0024] 图6所示的是根据本公开的第六实施例的执行体100的原理结构图。

具体实施方式

[0025] 下面结合实施例和附图对本公开做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
[0026] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
[0027] 在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0028] 应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,在下文中,两个可能设备之一可以被称为第一执行体也可以被称为第二执行体,类似地,两个可能设备的另一个可以被称为第二执行体也可以被称为第一执行体。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0029] 为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
[0030] 图1所示的是根据本公开的用静态分布式数据处理系统的基本执行体的结构示意图。如图1所示,大虚线框代表一个执行体。在图1所示的执行体网络组件中,为了方便,仅仅显示了一个执行体100以及其上游执行体101、201、301以及下游执行体102、202、302。实际上,对应于静态分布式数据处理系统的任务拓扑图,任务拓扑图有多少任务节点,在执行体网络组件中就存在多少执行体,因此在图1的上游执行体101、201、301以及下游执行体102、202、302的视图左侧面,采用省略号的方式来表示图1中有其他很多的执行体。每个执行体都具有相同的结构,都包括:部署在CPU上的上游消息发送/接收单元111和下游消息发送/接收单元112的消息仓110、有限状态机120以及任务插入组件130以及部署在外部设备(例如连接在CPU上的GPU或TPU等)或CPU本地的任务处理组件140,每个任务处理组件140包括数据运算单元150以及与一个或多个输出数据缓存160。为了简化示图,仅仅显示了执行体
100的具体结构。尽管图1中在执行体100中显示了三个输出数据缓存160,这并不意味着每个执行体必须包括三个输出数据缓存160,而是可以为一个或两个,或者更多输出数据缓存
160。每个执行体具体有多少个输出数据缓存160,基于其一次所能产生的结果数据的数量来确定。
[0031] 由于执行体部署在静态分布式计算环境中,因此每个执行体都具有执行体ID。执行体ID包含了其所属的计算设备ID、其具体任务所属的具体计算设备中的任务流ID以及其所属CPU线程ID。通过执行体ID,执行体就被静态分布在数据处理系统中确定的位置关系中,众多执行体之间形成具有上下游关系数据处理连接关系,由此形成包含有众多彼此关联的数据处理路径的数据处理拓扑图。每个执行体都包含有其完全属性信息,例如包括其任务类型信息,例如其执行何种计算操作;包含在有限状态机120中的触发执行的预定条件属性,例如消息发送条件、消息发送方向条件、任务执行触发条件;以及包含在输出数据缓存中的数据消费对象等等。每个执行体基于其完全属性信息获知其上下游关系、执行时序以及所要执行的任务,并在其所排列的任务流中时序到来时自动执行其所要执行的任务。
[0032] 在执行体网络组件进入数据处理过程中,用于执行体的CPU线程按序启动其ID排列在CPU线程中的执行体,从而处于数据处理路径中的任意执行体基于上游执行体或下游执行体发送来的消息驱动任务插入组件130,以便任务插入组件130将对应的操作任务排列到对应的任务流中。具体而言,如图1所示,在静态分布式数据处理系统中,由于将不同的计算任务部署到不同的计算设备上,因此,不同的计算设备形成不同的任务流,如图1所示的任务流S0、S1、S2、S3…、Sm。如果执行体100根据其执行体ID其计算任务将在某一计算设备GPU上执行,并且该计算设备GPU的任务流为S0,则执行体100在其任务时序到来时将其具体任务插入到其所属的任务流中。随后计算设备GPU上的执行体100的任务处理组件140随着任务流S0中属于执行体100的时序的到来而顺序执行任务处理,并将处理产生的结果存储到输出数据缓存160之一中。
[0033] 如图1所示,执行体100具有上游执行体101、201以及301以及下游执行体102、202以及302。为了方便起见,将编号以“10”开头的执行体定义为与执行体100属于同一任务流的执行体,例如都属于执行体S0,而编号以“20”或“30”开头的执行体为与执行体100不属于同一任务流的执行体。而且,在图1中,执行体100与不同任务流的执行体之间采用不同的连接线来表示,例如执行体100与执行体201和202之间采用双实线连接,而执行体100与执行体301和302之间采用三实线连接,以区别不同任务流之间的执行体。如图1所示,每个执行体包含两个部分,一部分是执行体的自我控制部分,其包括消息仓110、有限状态机120以及任务插入组件130,另一部分是执行体的具体执行组件140,包括运算单元150和输出数据缓存160。
[0034] 当执行体100其上下游执行体可以是属于同一任务流的执行体,也可以包括不属于同一任务流的执行体。当执行体100的上游执行体和下游执行体都与执行体100同属于一个任务流时,意味着图1中的执行体201、301、202以及302都不与执行体直接相关联。此时,当执行体100的消息仓110的上游消息发送/接收单元111接收到执行体101或其他同任务流的上游执行体发出的消息,并且也接收到执行体102或其他同任务流的下游执行体发出的反馈消息时,有限状态机120的状态被触发,从而向任务插入组件130发出插入向任务流S0中插入相应任务T1的指令。由此,任务插入组件130将自身的任务T1插入到任务流S0中的任务队列中,等待计算设备按序执行该任务T1。执行体100的任务插入组件130在将任务T1插入S0任务队列的同时,有限状态机120的状态被触发,指令下游消息发送/接收单元112向下游执行体102发送消息,以便下游执行体102的任务插入组件130可以基于该上游消息以及其他消息而将自身任务T2插入到任务流S0中。
[0035] 这样,当隶属于同一任务流的执行体将其任务依次插入任务流时,其各自的消息仓110并不需要等待其上游执行体的任务处理组件140执行完成之后才向其发出的任务处理完成的消息,而是在其上游执行体的任务插入组件130插入任务之后立即向下游发出消息。这样,同属于同一任务流的所有执行体可以在启动时在一个批次的数据处理过程中一次性将所有的任务几乎同时(只需要考虑到CPU线程的执行时间和任务插入操作时间)同一任务流,例如任务流S0。所有任务流S0所述的计算设备将按照任务流中的任务队列顺序,由对应的执行体的任务处理组件140依次执行所有的任务。通过这种方式,可以有效地减少CPU线程在任务插入过程时间占用,也减少了执行体在向下游执行体发送消息时等待具体任务执行过程的时间。
[0036] 而且,由于每个任务都是在任务队列中按照时序顺序执行,因此,下游执行体在执行时自然获得上游执行体的结果数据,因此不需要任何任务执行组件140执行回调事件,从而也减少了执行回调事件的时间,提高了整个数据处理系统进行数据处理的效率。
[0037] 图1中所示的都是在执行体彼此之间处于同一任务流的情况下任务流S0、S1、S2、S3…、Sm中部分任务插入情况。图2所示的是根据本公开的用静态分布式数据处理系统的基本执行体的第二实施例的结构示意图。如图2所示,执行体100的上游执行体和下游执行体包含了执行体201、301、202以及302,它们与执行体100部署在不同计算设备上,因此属于不同的任务流,例如执行体201和202属于任务流S1,而执行体301和302属于任务流S2。当执行体100的消息仓110在接收到上游执行体101、102和/或103的消息以及接收到下游执行体102、202和/或302的反馈消息后,执行体100的有限状态机120基于所获得的消息以及执行体属性中所包含的上游执行体或下游执行体的ID,确认其上游执行体或下游执行体中存在与其不属于同一任务流的执行体,因此,任务插入组件130基于有限状态机120对执行体状态的判断,将执行体100所承担的任务以及附后的回调事件插入任务流中,例如图2所示的任务T1以及回调事件E1。这样,当任务执行组件140执行任务T1后,直接执行回调事件E1,而回调事件E1占用的时间非常短,要比通常的回调任务要短的多,因此也节省了执行回调任务的时间。与此同时,为了实现不同任务流之间的并行,任务插入组件130在向任务流插入任务T1和回调事件E1的同时,还向部署在CPU上的与所述任务流对应设置的回调线程组件
40-0插入回调任务C1(未示出)。如图2所示,针对每个任务流,在CPU上都对应部署有一个回调线程组件,例如回调线程组件40-1、40-1…以及40-m。每个回调线程基于执行体100具有不同任务流的上下游执行体而向任务流插入附有回调事件的任务时,调用对应的回调任务执行体(未示出)。因此,如图2所示,执行体100在向任务流S0插入附有回调事件E1的任务T1的同时,触发回调线程组件40-0启动对应的回调任务执行体,监控回调事件E1的执行结果。
当回调任务执行体监控到回调事件E1被执行完时(例如该事件的初始值由0变为1时),就会执行回调任务,并在执行完毕后向执行体100的消息仓反馈消息。由此,执行体100的消息仓
110会获知对应回调任务执行体执行完毕的消息,并基于该执行完毕结果向与其不属于同一任务流的上游执行体或下游执行体反馈消息。根据图2显示的第二实施例可知,在处于单任务流的情况下,不需要设置如上所述的回调线程组件。
[0038] 可选择的,为了节省静态分布环境下计算资源以及简化数据处理系统中执行体分布的复杂性,可以通过对有限状态机120中配置多种触发状态使得执行体100能够重复执行相同的任务。图3所示的是根据本公开的第三实施例的执行体100的原理结构图。如图3所示,执行体100具有三个上游执行体101、103以及104。这仅仅是举例,其可以任意数量上游执行体。执行体可以逐一对上游执行体各自输出的结果数据进行相同的处理任务。有限状态机120包含有统计在一个上游消息循环周期内的数据处理次数的计数器121。例如,执行体100具有如图3所示的三个上游执行体101、103以及104,其在一次数据处理过程中,对三个上游执行体所输出的数据逐一执行处理,与此同时,计数器121统计在一个消息周期内收到上游消息的次数。当计数器在一个消息周期(三次)内,每收到一个不同的上游执行体发送来的消息(每个消息中都包含了执行体的ID),则任务插入组件130都将任务T0插入任务队列一次,并在插入任务T0之后上游消息发送/接收单元111只向所收到消息中包含的执行体ID所对应的执行体反馈消息。因此, 有限状态机120在一个以上的上游执行体个数作为一个消息周期内,如果没有依次收到所有上游执行体的消息之前,则在收到消息后处于第一上游状态。因此,有限状态机120在起初收到,例如执行体101和104的消息时,都处于第一上游状态。如果执行体100有更多上游执行体,例如五个,则会出现四个第一上游状态。当在一个消息周期内,消息仓110收到最后一个上游执行体,例如103,的消息后,有限状态机120将处于第二上游状态。因此,有限状态机120在消息仓110在一个上游消息周期内首先接收到上游执行体101的消息时处于第一上游状态。同样,有限状态机120在消息仓110在一个上游消息周期内接收到上游执行体104的消息时也处于第一上游状态。最后有限状态机120在消息仓110在一个上游消息周期内接收到上游执行体103的消息时处于第二上游状态。因此,第一上游状态是由部分预定条件所触发的,即,在一个消息周期内仅仅收到部分上游执行体的消息。而第二上游状态是由上游完全预定条件所触发的,即,在一个消息周期内依次收到了所有上游执行体的消息。有限状态机120基于其计数器121以及具体消息所包含的上游执行体的ID来改变执行体100的状态。
[0039] 因此,所述消息仓110在有限状态机120处于一个或多个第一上游状态之一时,只由上游消息发送/接收单元111向触发所述一个或多个第一上游状态之一的上游执行体之一发送消息,以及下游消息发送/接收单元112只有在有限状态机120处于第二上游状态时才向下游执行体发送消息以及上游消息发送/接收单元111向触发所述第二上游状态的上游执行体之一发送消息。具体而言,只有当计数器121统计到在一个消息周期内消息仓110收到三个不同上游执行体的消息时,在将任务T0插入任务流S0中的任务队列后,才由下游消息发送/接收单元112向执行体100的下游执行体发送消息。通过这种方式,任务执行组件可以依次执行任务队列中的一个周期内的三个相同的任务。在执行前两个相同的任务T0时,仅仅将中间结果数据存储在输出数据缓存中。根据具体操作需求,可以在需要时,输出数据缓存可以是执行体自身的输入端,执行体可以获取其中存储的中间数据。尽管此处显示了三个上游执行体,也可以为两个上游执行体或更多上游执行体。由于执行体100针对其上游执行体的输出结果逐一进行处理,并且及时向上游执行体反馈消息,因此,上游执行体101、103以及104能够基于所反馈的消息尽早地执行各自的下一批次数据的操作,使得其上游执行体彼此之间不用彼此等待。因此这缩短了执行体100的某些上游执行体所处数据处理路径中的数据处理间隔,也消除或缩短了执行体100的上游执行体之间的彼此等待时间。
[0040] 需要指出的是,在图3所示的实施例中,如果执行体100的某个上游执行体,例如上游执行体101或103等,与执行体100不属于同一任务流,在插入任务T0的同时,随后也需要如同第二实施例中一样在任务流中插入一个回调事件E0。
[0041] 图4所示的是根据本公开的第四实施例的执行体100的原理结构图。如图4所示,执行体100具有多个下游执行体102、105以及106,其上游执行体101与执行体100具有共同的内存资源,例如输出数据缓存160。尽管图4显示有三个下游执行体,但是也可以有更多或更少的下游执行体。尽管在图4中显示执行体100有一个输出数据缓存160,但是其可以有更多的输出数据缓存。在执行体100与执行体101共享输出数据缓存160的情况下,有限状态机120的计数器121统计来自使用所述共享输出数据缓存160中的结果数据的下游执行体的消息仓110的消息,当计数器121所统计到所述共享输出数据缓存160在一个消息周期(该消息周期的次数为使用该被共享的输出数据缓存160的下游执行体的数量)依次收到所有下游执行体的反馈消息时,有限状态机被触发,处于第三下游状态。因此,在消息仓100未收到所有下游执行体的反馈消息时,有限状态机120的状态一直不发生改变,因此也不会触发消息仓110的上游消息发送/接收单元111向上游执行体101反馈消息,这样,在被共享的输出数据缓存160中由任务执行组件140写入的结果数据也一直不会改变,直到有限状态机120处于第三下游状态为止。当有限状态机120在消息仓110接收到所述共享输出数据缓存160的所有下游执行体的反馈消息而处于第三下游状态时,所述执行体100的消息仓110的上游消息发送/接收单元111才向共享该输出数据缓存160的上游执行体101发送反馈消息。这样,上游执行体101才可以执行新一轮的数据处理并对共享该输出数据缓存160进行覆写,并向执行体100发送消息,由此开始新一轮数据共享循环。
[0042] 通过在相邻的执行体100和其上游执行体101之间共享输出数据缓存,可以极大减少计算资源和内存资源的重复需要,节省了数据处理的硬件成本,同时也在固定内存资源前提下,为提高内存资源的使用效率创造条件。
[0043] 图5所示的是根据本公开的第五实施例的执行体100的原理结构图。如图5所示,执行体100的有限状态机120的计数器121统计下游执行体,例如执行体102用输出数据缓存160中的数据的次数。具体而言,在计数器121的一个计数消息周期内,执行体102每次使用输出数据缓存160中的数据后都会经由各自的消息仓向执行体100的消息仓110反馈消息。
在有些情况下,执行体100的下游执行体102会在多个批次的数据处理中需要多次使用执行体100所产生的数据,为了简化静态分布环境下数据处理路径,减少计算资源的浪费,不是采用设置多个执行体100,而是使得执行体100重复执行相同的计算任务即可。为此。有限状态机120在以下游执行体执行操作的次数作为一个消息周期内,如果收到所有下游执行体的消息的次数没有达到预定次数之前,则在收到下游执行体的消息后处于第四下游状态。
图5中显示下游执行体102会针对执行体100所产生的数据执行三个批次的任务。根据数据处理的需要下游执行体102会针对执行体100所产生的数据执行更多批次的任务。当执行体
100的消息仓在预定消息周期内收到预定次数的下游执行体102发出的消息时,则有限状态机120处于第五下游状态。因此,有限状态机120在消息仓110在一个下游消息周期内首先接收到下游执行体102的第一次消息时处于第四下游状态。同样,有限状态机120在消息仓110在一个下游消息周期内接收到下游执行体102的第二次消息时也处于第五下游状态。最后有限状态机120在消息仓110在一个下游消息周期内接收到下游执行体102的第三次消息时处于第四下游状态(处于下一个下游消息周期的初始状态)。因此,第四下游状态是由部分预定条件所触发的,即,在一个下游消息周期内仅仅收到前期的几次消息。而第五下游状态是由下游完全预定条件所触发的,即,在一个下游消息周期内依次收到了下游执行体102在所有轮次(重复轮次减1)的消息。有限状态机120基于其计数器121以及具体消息所包含的下游执行体的ID来改变执行体100的状态。
[0044] 具体而言,在初始状态下(在前一下游消息周期的最后一次反馈消息的状态下),有限状态机120处于第四下游状态,所述执行体100的任务插入组件130将具体任务T0第一次排列在其所属的任务流S0中并且所述消息仓110只有下游消息发送/接收单元112立即向下游执行体102发送消息。下游执行体102在接收到执行体100的消息的情况下在需要处理第一批次的数据的t1时刻,将具体任务T2-1插入任务流S0中,并向执行体100的消息仓返回消息。在有限状态机120在收到下游执行体102的反馈消息而处于第四下游状态之一时,所述执行体100的任务插入组件130将具体任务T0第二次排列在其所属的任务流S0中并且所述消息仓110只由下游消息发送/接收单元112立即向下游执行体102发送消息。下游执行体102在接收到执行体100的消息的情况下在需要处理第二批次的数据的t2时刻,将具体任务T2-2插入任务流S0中,并向执行体100的消息仓110返回消息。此时消息仓110在一个下游消息周期内接收到两次消息,从而满足下游完全预定条件的第五下游状态,由此,任务插入组件130将具体任务T0第三排列在其所属的任务流中,并且消息仓110的上游消息发送/接收单元才向上游执行体101发送消息以及下游消息发送/接收单元才向下游执行体102发送消息以便重新启动下一下游消息周期。
[0045] 尽管以上所述指出下游执行体102的任务也插入到任务流S0中,但是执行体102也可以与执行体100属于不同的任务流,因此会插入其他任务流中,例如S1等。
[0046] 通过上述执行体100在一个下游消息周期内针对其上游执行体101的输出数据反复执行同一任务,可以满足其他数据处理路径中的执行体102对其输出数据的重复使用,从而消除为下游执行体102根据其重复使用次数而重复部署多个执行体100的需要,从而能够节省计算资源,简化执行体网络结构。
[0047] 图6所示的是根据本公开的第六实施例的执行体100的原理结构图。如图6所示,执行体100的有限状态机120的计数器121统计上游执行体,例如执行体101,在一个上游消息周期内执行体100发送消息的次数。具体而言,在计数器121的一个上游消息周期内,执行体101每次向其自身的输出数据缓存中的写入数据后都会经由其消息仓向执行体100的消息仓110发送消息。在有些情况下,执行体100会对同一上游执行体101的多个批次的数据进行一次性处理,为了简化静态分布环境下数据处理路径,减少计算资源的浪费,不是采用设置多个执行体100,而是使得执行体100重复执行相同的计算任务即可。为此。有限状态机120在以上游执行体101执行操作的次数作为一个消息周期内,如果收到所有上游执行体的消息的次数没有达到预定次数之前,则在收到下游执行体的消息后处于第六上游状态。图6中显示执行体100会针对上游执行体101所产生的三个批次数据执行计算任务。根据数据处理的需要执行体100可针对上游执行体101所产生的更多批次的数据执行任务。当执行体100的消息仓在预定上游消息周期内收到预定次数的上游执行体101发出的消息时,则有限状态机120处于第七下游状态。因此,有限状态机120在消息仓110在一个上游消息周期内首先接收到上游执行体101的第一次消息时(t1时刻)处于第六上游状态。同样,有限状态机120在消息仓110在一个下游消息周期内接收到上游执行体101的第二次消息时也处于第六上游状态。最后有限状态机120在消息仓110在一个下游消息周期内接收到上游执行体101的第三次消息时处于第七下游状态。因此,第六上游状态是由部分上游预定条件所触发的,即,在一个上游消息周期内仅仅收到前期的几次消息。而第七上游状态是由上游完全预定条件所触发的,即,在一个上游消息周期内依次收到了上游执行体101在所有轮次的消息。
有限状态机120基于其计数器121以及具体消息所包含的上游执行体的ID来改变执行体100的状态。
[0048] 具体而言,在所述执行体100的消息仓110在t1时刻第一次收到上游执行体101的消息时,其有限状态机120处于第六上游状态,所述执行体100的任务插入组件130将具体任务T0第一次排列在其所属的任务流S0中的执行体101所插入的任务T1-1之后,并且所述消息仓110只由上游消息发送/接收单元111立即向上游执行体101发送消息,而下游消息发送/接收单元112并不向下游执行体发送消息。上游执行体101在接收到执行体100的反馈消息的情况下在需要处理第二批次的数据的t2时刻,将具体任务T1-2插入任务流S0中,并向执行体100的消息仓110第二次发送消息。在有限状态机120在收到上游执行体101的第二次发送的消息而处于第六上游状态之一时,所述执行体100的任务插入组件130将具体任务T0第二次排列在其所属的任务流S0中的任务T1-2之后。同样,此时在有限状态机120的第六状态的触发下,所述消息仓110只由上游消息发送/接收单元111立即向上游执行体101发送消息,而下游消息发送/接收单元112并不向下游执行体发送消息。
[0049] 最后,上游执行体101在接收到执行体100的反馈消息的情况下在需要处理第三批次的数据的t3时刻,将具体任务T1-3插入任务流S0中,并向执行体100的消息仓110第三次发送消息。在有限状态机120在收到上游执行体101的第三次发送的消息而处于第起上游状态时,所述执行体100的任务插入组件130将具体任务T0第三次排列在其所属的任务流S0中的任务T1-3之后。同样,此时在有限状态机120的第七状态的触发下,所述消息仓110在由上游消息发送/接收单元111立即向上游执行体101发送消息的同时,下游消息发送/接收单元112立即向下游执行体发送消息,从而重新启动下一上游消息周期。
[0050] 尽管以上所述指出上游执行体101的任务也插入到任务流S0中,但是执行体101也可以与执行体100属于不同的任务流,因此会插入其他任务流中,例如S1等。
[0051] 通过上述执行体100在一个上游消息周期内针对其上游执行体101的多批次的输出数据一次性执行多次任务,可以消除为上游执行体101根据其一个上游消息周期内的多批次数据而重复部署多个执行体100的需要,从而能够节省计算资源,简化执行体网络结构。
[0052] 尽管以上针对本公开的构思结合附图进行详细的描述,很显然,根据本公开的另一个方面,其包含了一种用于上述执行体的数据处理方法。具体而言,一种在执行体网络中进行数据处理的方法,所述执行体网络中的执行体与其上游执行体和/或下游执行体进行数据通信,所述执行体包括部署在CPU上的上游消息发送/接收单元和下游消息发送/接收单元的消息仓、有限状态机以及任务插入组件以及部署在外部设备或CPU本地的任务处理组件,每个任务处理组件包括数据运算单元以及与一个或多个输出数据缓存,所述方法包括:基于消息仓中所接收到的消息以及发送消息,所述有限状态机改变执行体的当前状态;在有限状态机处于预定条件的状态时,如果触发所述预定条件的各个消息所属的上游执行体和/或下游执行体所属的任务流与所述执行体所属的任务流相同,则所述任务插入组件只将所述执行体的具体任务排列在其所属的任务流中并向其对应的任务处理组件发出运算指令,并且所述消息仓立即向触发所述预定条件的所有消息所属的上游和/或下游执行体发送消息,如果触发预定条件的任何消息之一所属的执行体所属的任务流与所述执行体所属的任务流不相同,则所述任务插入组件将其后附有回调事件的具体任务排列其所属的任务流中以及同时向部署在CPU上的用于控制任务流并行的回调线程组件插入回调任务,并向其对应的任务处理组件发出运算指令;以及所述运算单元在所述任务流中被指派给自身的任务顺序到来时读取上游执行体所对应输出数据缓存中的数据并执行预定的操作,并将执行操作后的结果数据存储在所述执行体的输出数据缓存中。
[0053] 以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。
[0054] 因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
[0055] 还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
[0056] 上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。