CN116302564A - 一种基于无状态运行时的程序分布式执行方法 - Google Patents

一种基于无状态运行时的程序分布式执行方法 Download PDF

Info

Publication number
CN116302564A
CN116302564A CN202310469894.8A CN202310469894A CN116302564A CN 116302564 A CN116302564 A CN 116302564A CN 202310469894 A CN202310469894 A CN 202310469894A CN 116302564 A CN116302564 A CN 116302564A
Authority
CN
China
Prior art keywords
subtask
operator
program
target
determining
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310469894.8A
Other languages
English (en)
Other versions
CN116302564B (zh
Inventor
高丰
王晓阳
孙铭鸽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Lab
Original Assignee
Zhejiang Lab
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Lab filed Critical Zhejiang Lab
Priority to CN202310469894.8A priority Critical patent/CN116302564B/zh
Publication of CN116302564A publication Critical patent/CN116302564A/zh
Application granted granted Critical
Publication of CN116302564B publication Critical patent/CN116302564B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本说明书公开了一种基于无状态运行时的程序分布式执行方法。在本说明书提供的程序分布式执行方法中,获取目标程序,并确定执行所述目标程序时所需要完成的子任务;根据各子任务,确定各子任务的算子集合,其中,一个子任务对应的算子集合中包含了完成该子任务所需的全部算子;针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务;采用预先为所述目标子任务分配的计算节点,采用预先为所述目标子任务分配的计算节点,执行所述目标子任务对应的算子集合,执行过程中所产生的事件触发其他子任务进入预备执行状态,子任务执行完毕进入等待状态,等待下一次触发。

Description

一种基于无状态运行时的程序分布式执行方法
技术领域
本说明书涉及计算机技术领域,尤其涉及一种基于无状态运行时的程序分布式执行方法。
背景技术
目前,分布式计算是一种较为常见的计算方式。分布式计算将一个任务分解为多个子任务,部署到不同的计算节点,共同协作完成任务的计算。其中,分布式计算中存在同步与异步两种不同的计算方式。相比于同步计算,异步计算的方式能够将等待的时间用于执行任务,减少系统在多线程下的开销。
同时,在执行程序时,还存在有状态计算与无状态计算两种不同的计算方式。有状态计算中,各任务之间存在关联,需要保存额外的数据,也就是对状态进行同步;而无状态计算中没有同步状态的开销,更加适配与分布式计算。
因此,如何实现程序在异步无状态方式下的运行是一个亟待解决的问题。
发明内容
本说明书提供一种基于无状态运行时的程序分布式执行方法,以至少部分地解决现有技术存在的上述问题。
本说明书采用下述技术方案:
本说明书提供了一种基于无状态运行时的程序分布式执行方法,包括:
获取目标程序,并确定执行所述目标程序时所需要完成的子任务;
根据各子任务,确定各子任务的算子集合,其中,一个子任务对应的算子集合中包含了完成该子任务所需的全部算子;
针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务;
采用预先为所述目标子任务分配的计算节点,执行所述目标子任务对应的算子集合,执行过程中所产生的事件触发其他子任务进入预备执行状态,子任务执行完毕进入等待状态,等待下一次触发。
可选地,根据各子任务,确定各子任务的算子集合,具体包括:
针对每个子任务,根据该子任务的输入和输出,确定完成该子任务所需的全部算子,作为该子任务的算子集合。
可选地,所述算子包括网络服务接口算子、标准输入输出接口算子、文件读写接口算子、数据库接口算子、数据流过滤算子、数据流合并算子、数据流复制算子中的至少一种。
可选地,采用算子图表示所述算子集合;
根据各子任务,确定各子任务的算子集合,具体包括:
针对每个子任务,确定完成该子任务所需的全部算子,并以完成该子任务所需的各算子为结点,根据所述各算子的存储路径构建算子图;
针对所述算子图中的每个结点,当该结点有且仅有一个子结点时,将该结点的子结点与该结点合并。
可选地,在将该子任务确定为目标子任务之前,所述方法还包括:
以所述各子任务的算子集合为结点,根据所述各子任务之间的关联关系,构建程序图。
可选地,针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务,具体包括:
针对每个子任务,当接收到执行该子任务的事件时,根据所述程序图,确定该子任务的上游任务;
若该子任务的上游任务已被执行,则将该子任务确定为目标子任务;
若该子任务的上游任务未被执行,将该子任务的上游任务确定为目标子任务。
可选地,预先分配计算节点,具体包括:
根据分组策略,对各子任务进行分组;
根据分组结果,为每组子任务分配不同的计算节点。
可选地,所述方法还包括:
在执行子任务的过程中,当检测到计算资源发生变化时,根据变化后的当前计算资源,重新对未执行的子任务进行分组;
根据重新分组的分组结果,重新为每组子任务分配不同的计算节点。
本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述基于无状态运行时的程序分布式执行方法。
本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述基于无状态运行时的程序分布式执行方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
在本说明书提供的程序分布式执行方法中,获取目标程序,并确定执行所述目标程序时所需要完成的子任务;根据各子任务,确定各子任务的算子集合,其中,一个子任务对应的算子集合中包含了完成该子任务所需的全部算子;针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务;采用预先为所述目标子任务分配的计算节点,采用预先为所述目标子任务分配的计算节点,执行所述目标子任务对应的算子集合,执行过程中所产生的事件触发其他子任务进入预备执行状态,子任务执行完毕进入等待状态,等待下一次触发。
在采用本说明书提供的程序分布式执行方法时,可通过算子集合的形式表征执行程序的过程中需要执行的每个子任务,当接收到子任务需要执行的事件时,执行相应的算子集合来完成子任务的执行。通过分布式计算的形式,异步地在多个计算节点下执行多个子任务,且各子任务可无状态地分别执行,无需保存状态,减少程序执行过程中的数据处理量,加快程序的执行效率。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为本说明书中一种基于无状态运行时的程序分布式执行方法的流程示意图;
图2为本说明书中一种基数树形式的算子图的结构示意图;
图3为本说明书中一种基于无状态运行时的程序分布式执行方法对应的运行时的结构示意图;
图4为本说明书提供的一种程序执行装置的示意图;
图5为本说明书提供的对应于图1的电子设备示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1为本说明书中一种基于无状态运行时的程序分布式执行方法的流程示意图,具体包括以下步骤:
S100:获取目标程序,并确定执行所述目标程序时所需要完成的子任务。
本说明书所提供的程序分布式执行方法中的所有步骤均可由任何具有计算功能的电子设备实现,例如终端、服务器等设备。
本说明书所提供的程序分布式执行方法旨在多计算节点分布式计算的环境下,以异步无状态的方式执行程序。对于不同程序,在执行时所需要完成的功能都不相同。通常情况下,可将一个程序执行时最终所要实现的功能或达到的目标作为执行该程序时所要完成的任务。在分布式计算中,程序所对应的完整的任务通常会被拆分为多个子任务,并部署到不同的计算节点,由多个计算节点分别处理子任务,协作完成计算。其中,每个子任务所实现的功能各不相同,当全部子任务都完成时,便能够实现程序最终的功能,也就是完成程序的执行。
基于此,可首先在此步骤中获取需要执行的目标程序,同时,确定出执行目标程序时所需要完成的全部子任务。
S102:根据各子任务,确定各子任务的算子集合,其中,一个子任务对应的算子集合中包含了完成该子任务所需的全部算子。
从广义上讲,对任何函数进行任一项操作都可以认为是一个算子。简单来说,算子的功能就是实现一种具体的计算。在计算机系统中,任何功能都可以通过连续地多种计算来实现,也就是说,任何功能都可以由多个算子得到。同样的,只要确定了所需要实现的功能,便能够进一步地确定出实现这一功能所需要的算子。
基于此,在此步骤中,可根据步骤S100中确定出的各子任务,确定出每个子任务的算子集合。对于任一子任务,在确定出该子任务后,便能够通过该字任务所要实现的功能,确定出完成该子任务所需要的全部算子,也就是该子任务的算子集合。
进一步地,一个子任务所要实现的功能可通过该子任务的输入流和输出流体现。也就是说,通过一个子任务的输入和输出,便能够得到该子任务需要的算子。具体的,可针对每个子任务,根据该子任务的输入和输出,确定完成该子任务所需的全部算子,作为该子任务的算子集合。
在一个子任务中,可能会存在多个输入和多个输出,每一对输入和输出均可对应于一个或多个算子。目前,对于各功能的实现都已较为成熟,因此通常情况下,同一输入-输出对所对应的算子是固定的。相反的,不同的输入-输出对中,可能存在相同的计算,因此一种算子可能用于处理多种不同的输入和输出。也就是说,对于任一子任务来说,该子任务的算子集合中可能会包含重复的算子。
其中,本方法中所用到的算子可以从预先创建的算子库中获取。算子库中可包含任意算子,例如数据接口类算子,包括但不限于网络服务接口算子、标准输入输出接口算子、文件读写接口算子、数据库接口算子等;数据流处理算子,包括但不限于数据流过滤算子、数据流合并算子、数据流复制算子等;算法类算子,包括但不限于AI类算子、科学计算类算子、领域专用类算子等。
通过算子集合的方式,可将各子任务表征为若干算子,各子任务仅通过对应的算子集合中的算子,便能够实现子任务的执行,无需依赖其它信息。换句话说,通过算子集合帮助子任务构成了无状态计算的计算方式。在此方式下,对于任一子任务,都不需要获取其它子任务的状态,相应的,系统本身也就无需保存任何状态,有效减少了程序执行时的数据处理量。
更优的,可采用图的形式来表示算子集合。具体的,可针对每个子任务,确定完成该子任务所需的全部算子,并以完成该子任务所需的各算子为结点,根据所述各算子的存储路径构建算子图。
正如上文中提到的,一个算子集合中可能会存在重复的算子。即,某些不同的输入-输出对所需要的算子中存在相同的算子。但实际上,由于算子本身只对应于计算,并不属于任何一个输入-输出对,也就是说,算子本身是可以复用的,并不需要在一个算子集合中保存多个相同的算子。因此,可更进一步地,以基数树(Radix Tree)的形式来将算子集合中的算子构建为算子图。具体的,可针对所述算子图中的每个结点,当该结点有且仅有一个子结点时,将该结点的子结点与该结点合并。
图2为本说明书中提供的一种基数树形式的算子图的结构示意图。如图2所示,在基数树中,每个结点的子结点数量要么为零,要么为至少两个;当一个结点仅存在一个子结点时,就会将该结点与其子结点合并。在上述规则下,基数树会将不同路径下的相同算子合并,由此,可减少每个算子集合中部署算子的数量,进一步减轻系统的负担。
S104:针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务。
当接收到执行一个子任务的事件时,可在此步骤中,将对应的子任务确定为目标子任务,准备在后续步骤中执行目标子任务。换句话说,目标子任务就是将要被执行的子任务。
在分布式计算的环境中,采用计算节点来执行子任务。通常情况下,系统中会存在多个计算节点,可同时执行多个子任务,即进行多线程的处理。不难想到,每个计算节点只能够同时执行一个子任务,而通常子任务的数量会远多于计算节点的数量。因此,需要每个计算节点依次处理多个不同的子任务。
需要注意的是,在分布式计算的多线程执行环境下,子任务并非一个一个执行,而是多个子任务同时执行。因此,可能会同时接收到多个执行不同子任务的事件,确定出多个不同的目标子任务。实际上,对于每个计算节点本身,子任务是一个一个依次执行的,也就是说,每当任意一个计算节点完成当前子任务,并且还存在剩余的分配给该计算节点的子任务时,就会触发执行子任务的事件。
更优的,在确定出各子任务的算子集合之后,开始执行各子任务之前,可具体的,以所述各子任务的算子集合为结点,根据所述各子任务之间的关联关系,构建程序图。对于各子任务来说,通常情况下,各子任务可并行地在不同计算节点上同时执行。但在实际应用中,各子任务之间可能会存在一些关联关系,例如,子任务A的输入需要用到子任务B的输出。在这种情况下,就必须要先完成子任务B后,才能够完成子任务A。基于此,可将各算子集合作为结点,将各子任务之间的关联关系作为边,构建有向图,作为程序图。在程序途中,可明显地表达出各子任务之间的输入流、输出流的关系。
通常情况下,如果子任务A的输入需要调用子任务B的输出,那么可将子任务B称为子任务A的上游任务。在采用程序图的情况下,如果接收到需要执行子任务的输入,需要调用到还未执行的子任务的输出,那么根据程序图,便能够快速确定出需要执行的子任务的上游任务,并优先执行上游任务。具体的,可针对每个子任务,当接收到执行该子任务的事件时,根据所述程序图,确定该子任务的上游任务;若该子任务的上游任务已被执行,则将该子任务确定为目标子任务;若该子任务的上游任务未被执行,将该子任务的上游任务确定为目标子任务。
在接收到执行一个子任务的事件时,可首先在程序图中确定出该子任务的上游任务。如果该子任务的上游任务已被执行,那么可直接将该子任务确定为目标子任务,准备执行;而如果该子任务的上游任务为被执行,那么就需要优先执行该子任务的上游任务,将该子任务的上游任务确定为目标子任务,准备执行。
S106:采用预先为所述目标子任务分配的计算节点,采用预先为所述目标子任务分配的计算节点,执行所述目标子任务对应的算子集合,执行过程中所产生的事件触发其他子任务进入预备执行状态,子任务执行完毕进入等待状态,等待下一次触发。
在分布式计算方式下,执行各子任务的计算节点都是预先分配的。具体的,可根据分组策略,对各子任务进行分组;根据分组结果,为每组子任务分配不同的计算节点。其中,分组策略是为了在计算中达成某种效果而制定的策略,分组策略可以存在多种,包括但不限于均衡负载、最小通信等策略,本说明书对此不做具体限制。在完成对各子任务的分组后,每一组中都会存在若干子任务。相应的,可为每一组子任务分配一个计算节点,用于执行该组中的所有子任务。
在步骤S104中确定出目标子任务后,可在此步骤中,采用预先分配给目标子任务的节点,执行目标子任务。同时,一个子任务的执行可能会产生触发执行其它子任务的事件,此时,可回到步骤S104,重新将触发了执行事件的子任务确定为目标子任务,并在步骤S106中执行。换句话说,在程序执行的过程中,可不断地循环执行步骤S104~S106,不断根据用户的需求以及操作执行实现相应功能的子任务,直到接收到关闭程序的事件,也就是用户将程序关闭。
更进一步的,在执行子任务的过程中,计算资源可能会发生改变,导致计算节点的数量或负载能力发生变化。因此,可在执行子任务的过程中,重新划分各计算节点执行的子任务。具体的,可在执行子任务的过程中,当检测到计算资源发生变化时,根据变化后的当前计算资源,重新对未执行的子任务进行分组;根据重新分组的分组结果,重新为每组子任务分配不同的计算节点。
不难想到,在执行程序的过程中,外部环境也并非固定不变的。外部环境的变化所导致的各种因素可能会使程序的执行环境中的计算资源发生变化。此时,为了保证执行程序的稳定以及效率,需要重新对未执行的各子任务进行分组,并重新为每组子任务分配不同的计算节点。在分组的过程中,无论是预先分组,还是在执行子任务的过程中进行分组,为保证计算资源的最大化利用,分组的数量通常都与可利用的计算节点的数量相同。
在采用本说明书提供的程序分布式执行方法时,可通过算子集合的形式表征执行程序的过程中需要执行的每个子任务,当接收到子任务需要执行的事件时,执行相应的算子集合来完成子任务的执行。通过分布式计算的形式,异步地在多个计算节点下执行多个子任务,且各子任务可无状态地分别执行,无需保存状态,减少程序执行过程中的数据处理量,加快程序的执行效率。
额外的,在计算机系统中,运行时是指一个程序在运行或者在被执行的依赖,换句话说,运行时相当于程序的运行环境。系统中的运行时决定了程序的执行方式,因此,通过对运行时的结构的改变能够实现对程序执行方式的改变。根据本说明书中提供的程序分布式执行方法,本说明书还提供了相应的运行时。
图3为本说明书中提供的一种运行时的结构示意图。如图3所示,运行时的结构由两层所构成,分别为程序图层和调度层。底层为程序图层,由相互连接的算子集合所构成,在图3中采用算子图的形式表示算子集合,算子图是多个算子连接的可执行单元,由算子图标识(subgraphID)表示;调度层由执行队列构成,如果算子图被触发,进入可执行状态,则算子图的subgraphID进入执行队列,等待被执行。其中,执行队列可仅存在一个,将所有的子任务都调度到该执行队列中执行;也可存在多个不同的执行队列,每个执行队列对应于一个计算节点的线程下处理的各子任务,本说明书对此不做具体限制。
本说明书提供的程序分布式执行方法以及运行时可在多种不同的编程语言下实施,本说明书在此以Rust语言为例,提供一具体实施例以共参考。
async/await这两个关键字是Rust语言中的异步编程领域的标志,但在 Rust 中这两个关键字只是起到语法糖的作用,并不是异步的核心。async 用于快速创建 Future,不管是函数还是代码块或者lambda表达式,都可以在前面加上 async 关键字快速变成Future。
在Rust语言中,Future代表一个可在未来某个时候获取返回值的task,为了获取这个task的执行状况,Future提供了一个函数用于判断该task是否执行返回。
trait Future{
type Output;
fn poll(self: Pin<&mut self>, cx:&mut Context<'_>) -> Poll<Self::Output>;
}
poll 函数就是一个 Future 用于检查自己的 task 是否已经完成,例如创建一个与某个 IP 建立 TCP 连接的 struct,在构建时完成建立连接的工作,然后实现 Futuretrait时检查连接是否已经建立完成。根据建立情况返回 enum Poll 中的两个元素之一:
Poll::Pending: task 表示还在等待;
Poll::Ready(result): task 表示携带 result 返回;
基于async定义的函数和代码块会被编译器编译为Future。但是async函数或代码块无法显式地返回Pending,因此一般只能完成一些简单的调用其他 Future 的工作。复杂的异步过程通常还是交由实现了Future trait的类型完成。Rust语言的异步机制包括Poll/Wait/Wake等3个阶段。Poll表明执行体的计算已经不能取得进展,需要yield放弃CPU;Wait通过Reactor的注册,表明某Future是在等待某事件的发生;Wake表明事件发生了,注册的Future应该被唤醒。如何将这3个阶段进行关联,是Rust异步机制处理的核心,而Future中的poll函数签名里的Context参数的就是对事件Event和Waker进行关联,Context 暂时只用于获取 Waker,而 Waker 的作用是提醒 executor 该 task 已经准备好运行了。
Waker 内部定义有一个 RawWaker,RawWaker 包含一个 RawWakerVTable,RawWakerVTable 定义了四个函数指针,executor 要实现 Waker 就需要定义这四种类型的函数然后赋值给 RawWakerVTable。
struct Waker {
waker: RawWaker
}
struct RawWaker {
data: *const (),
vtable:&'static RawWakerVTable
}
struct RawWakerVTable {
clone: unsafe fn(*const ()) -> RawWaker,
wake: unsafe fn(*const ()),
wake_by_ref: unsafe fn(*const ()),
drop: unsafe fn(*const ())
}
Waker没有设计为trait形式,主要是clone函数,受限于Rust的trait objectsafety,trait中的任何函数的参数或返回值如果包含Self且有type bound Sized,则不符合 trait object safe 规范,这样的 trait 可以被定义,可以被实现,但是无法与dyn一起进行动态绑定。而在异步clones函数又是必须的,因为Future可能还会接着调用Future的poll方法,就需要再clone 一个context传入。或许可以用Box<dyn Waker>或者Arc<dyn Waker>之类的,但是这些都不比raw pointer灵活,所以Rust还是选择定义一个包含函数指针的 struct。
基于Rust中的Poll/Wait/Wake的三阶段异步处理模型,一旦算子图中有异步的事件,Poll轮询到ready状态之后,触发Wake机制,Wake将对应算子图的subgraphID作为参数传递到执行队列;执行队列的守护线程完成两个动作:一是根据subgraphID找到对应的subgraph,并调用subgraph.run()执行;二是根据各算子图之间的连接关系,将算子图的运行结果作为事件发送给关联的算子图,并通过事件触发这些关联的算子图。
以上是本说明书提供的程序分布式执行方法,基于同样的思路,本说明书还提供了相应的程序执行装置,如图4所示。
图4为本说明书提供的一种程序执行装置示意图,具体包括:
获取模块200,用于获取目标程序,并确定执行所述目标程序时所需要完成的子任务;
确定模块202,用于根据各子任务,确定各子任务的算子集合,其中,一个子任务对应的算子集合中包含了完成该子任务所需的全部算子;
接收模块204,用于针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务;
执行模块206,用于采用预先为所述目标子任务分配的计算节点,执行所述目标子任务对应的算子集合,执行过程中所产生的事件触发其他子任务进入预备执行状态,子任务执行完毕进入等待状态,等待下一次触发。
可选地,所述确定模块202,具体用于针对每个子任务,根据该子任务的输入和输出,确定完成该子任务所需的全部算子,作为该子任务的算子集合。
可选地,所述算子包括网络服务接口算子、标准输入输出接口算子、文件读写接口算子、数据库接口算子、数据流过滤算子、数据流合并算子、数据流复制算子中的至少一种。
可选地,采用算子图表示所述算子集合;
所述确定模块202,具体用于针对每个子任务,确定完成该子任务所需的全部算子,并以完成该子任务所需的各算子为结点,根据所述各算子的存储路径构建算子图;针对所述算子图中的每个结点,当该结点有且仅有一个子结点时,将该结点的子结点与该结点合并。
可选地,所述装置还包括构建模块208,具体用于以所述各子任务的算子集合为结点,根据所述各子任务之间的关联关系,构建程序图。
可选地,所述接收模块204,具体用于针对每个子任务,当接收到执行该子任务的事件时,根据所述程序图,确定该子任务的上游任务;若该子任务的上游任务已被执行,则将该子任务确定为目标子任务;若该子任务的上游任务未被执行,将该子任务的上游任务确定为目标子任务。
可选地,所述装置还包括分配模块210,具体用于根据分组策略,对各子任务进行分组;根据分组结果,为每组子任务分配不同的计算节点。
可选地,所述执行模块206,具体用于在执行子任务的过程中,当检测到计算资源发生变化时,根据变化后的当前计算资源,重新对未执行的子任务进行分组;根据重新分组的分组结果,重新为每组子任务分配不同的计算节点。
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图1提供的程序分布式执行方法。
本说明书还提供了图5所示的电子设备的示意结构图。如图5所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图1所述的程序分布式执行方法。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(ProgrammableLogic Device, PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(HardwareDescription Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(AdvancedBoolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(JavaHardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby HardwareDescription Language)等,目前最普遍使用的是VHDL(Very-High-Speed IntegratedCircuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (10)

1.一种基于无状态运行时的程序分布式执行方法,其特征在于,包括:
获取目标程序,并确定执行所述目标程序时所需要完成的子任务;
根据各子任务,确定各子任务的算子集合,其中,一个子任务对应的算子集合中包含了完成该子任务所需的全部算子;
针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务;
采用预先为所述目标子任务分配的计算节点,执行所述目标子任务对应的算子集合,执行过程中所产生的事件触发其他子任务进入预备执行状态,子任务执行完毕进入等待状态,等待下一次触发。
2.如权利要求1所述的方法,其特征在于,根据各子任务,确定各子任务的算子集合,具体包括:
针对每个子任务,根据该子任务的输入和输出,确定完成该子任务所需的全部算子,作为该子任务的算子集合。
3.如权利要求1所述的方法,其特征在于,采用算子图表示所述算子集合;
根据各子任务,确定各子任务的算子集合,具体包括:
针对每个子任务,确定完成该子任务所需的全部算子,并以完成该子任务所需的各算子为结点,根据所述各算子的存储路径构建算子图;
针对所述算子图中的每个结点,当该结点有且仅有一个子结点时,将该结点的子结点与该结点合并。
4.如权利要求1所述的方法,其特征在于,所述算子包括网络服务接口算子、标准输入输出接口算子、文件读写接口算子、数据库接口算子、数据流过滤算子、数据流合并算子、数据流复制算子中的至少一种。
5.如权利要求1所述的方法,其特征在于,在将该子任务确定为目标子任务之前,所述方法还包括:
以所述各子任务的算子集合为结点,根据所述各子任务之间的关联关系,构建程序图。
6.如权利要求5所述的方法,其特征在于,针对每个子任务,当接收到执行该子任务的事件时,将该子任务确定为目标子任务,具体包括:
针对每个子任务,当接收到执行该子任务的事件时,根据所述程序图,确定该子任务的上游任务;
若该子任务的上游任务已被执行,则将该子任务确定为目标子任务;
若该子任务的上游任务未被执行,将该子任务的上游任务确定为目标子任务。
7.如权利要求1所述的方法,其特征在于,预先分配计算节点,具体包括:
根据分组策略,对各子任务进行分组;
根据分组结果,为每组子任务分配不同的计算节点。
8.如权利要求7所述的方法,其特征在于,所述方法还包括:
在执行子任务的过程中,当检测到计算资源发生变化时,根据变化后的当前计算资源,重新对未执行的子任务进行分组;
根据重新分组的分组结果,重新为每组子任务分配不同的计算节点。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~8任一项所述的方法。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1~8任一项所述的方法。
CN202310469894.8A 2023-04-27 2023-04-27 一种基于无状态运行时的程序分布式执行方法 Active CN116302564B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310469894.8A CN116302564B (zh) 2023-04-27 2023-04-27 一种基于无状态运行时的程序分布式执行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310469894.8A CN116302564B (zh) 2023-04-27 2023-04-27 一种基于无状态运行时的程序分布式执行方法

Publications (2)

Publication Number Publication Date
CN116302564A true CN116302564A (zh) 2023-06-23
CN116302564B CN116302564B (zh) 2023-08-11

Family

ID=86790807

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310469894.8A Active CN116302564B (zh) 2023-04-27 2023-04-27 一种基于无状态运行时的程序分布式执行方法

Country Status (1)

Country Link
CN (1) CN116302564B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105677812A (zh) * 2015-12-31 2016-06-15 华为技术有限公司 一种数据查询方法及数据查询装置
CN109558237A (zh) * 2017-09-27 2019-04-02 北京国双科技有限公司 一种任务状态管理方法及装置
CN110609749A (zh) * 2019-09-06 2019-12-24 阿里巴巴集团控股有限公司 一种分布式任务运行方法、系统及设备
CN110851465A (zh) * 2019-11-15 2020-02-28 腾讯科技(深圳)有限公司 数据查询方法及系统
CN111967849A (zh) * 2020-08-19 2020-11-20 支付宝(杭州)信息技术有限公司 一种任务处理流程编排方法、装置及电子设备
CN114138334A (zh) * 2021-10-29 2022-03-04 北京中科昊芯科技有限公司 一种循环程序执行方法、装置以及处理器
CN115099972A (zh) * 2022-06-28 2022-09-23 中国银行股份有限公司 基于事件驱动架构的交易数据处理方法、装置及设备
CN115357866A (zh) * 2022-08-12 2022-11-18 杭州趣链科技有限公司 应用程序执行方法、装置、设备及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105677812A (zh) * 2015-12-31 2016-06-15 华为技术有限公司 一种数据查询方法及数据查询装置
CN109558237A (zh) * 2017-09-27 2019-04-02 北京国双科技有限公司 一种任务状态管理方法及装置
CN110609749A (zh) * 2019-09-06 2019-12-24 阿里巴巴集团控股有限公司 一种分布式任务运行方法、系统及设备
CN110851465A (zh) * 2019-11-15 2020-02-28 腾讯科技(深圳)有限公司 数据查询方法及系统
CN111967849A (zh) * 2020-08-19 2020-11-20 支付宝(杭州)信息技术有限公司 一种任务处理流程编排方法、装置及电子设备
CN114138334A (zh) * 2021-10-29 2022-03-04 北京中科昊芯科技有限公司 一种循环程序执行方法、装置以及处理器
CN115099972A (zh) * 2022-06-28 2022-09-23 中国银行股份有限公司 基于事件驱动架构的交易数据处理方法、装置及设备
CN115357866A (zh) * 2022-08-12 2022-11-18 杭州趣链科技有限公司 应用程序执行方法、装置、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HUAI LIU: "A real-time scheduling algorithm for hybrid tasks in networked control systems based on deferred subsequent subtasks", 《2010 CHINESE CONTROL AND DECISION CONFERENCE》 *
杨慧等: "基于层次任务网络规划的分布式协同地理建模任务分解方法研究", 《测绘学报》, vol. 42, no. 3 *
霍达等: "基于Celery的分布式视频计算处理框架", 《电视技术》, vol. 40, no. 4 *

Also Published As

Publication number Publication date
CN116302564B (zh) 2023-08-11

Similar Documents

Publication Publication Date Title
CN107360206B (zh) 一种区块链共识方法、设备及系统
CN107577523B (zh) 一种任务执行的方法及装置
CN109725989B (zh) 一种任务执行的方法及装置
CN110597614B (zh) 一种资源调整方法及装置
CN108683692A (zh) 一种业务请求处理方法及装置
CN112748993A (zh) 任务执行方法、装置、存储介质及电子设备
CN116185532B (zh) 一种任务执行系统、方法、存储介质及电子设备
WO2020168901A1 (zh) 一种数据计算方法及引擎
Isovic et al. Handling mixed sets of tasks in combined offline and online scheduled real-time systems
CN116932175B (zh) 一种基于序列生成的异构芯片任务调度方法以及装置
CN116302564B (zh) 一种基于无状态运行时的程序分布式执行方法
CN111459573B (zh) 一种智能合约执行环境的启动方法以及装置
CN116107728A (zh) 一种任务执行方法、装置、存储介质及电子设备
CN113032119A (zh) 一种任务调度方法、装置、存储介质及电子设备
US11954419B2 (en) Dynamic allocation of computing resources for electronic design automation operations
CN116737345A (zh) 分布式任务处理系统及方法、装置、存储介质以及设备
CN110032433B (zh) 一种任务执行方法、装置、设备及介质
CN111580938B (zh) 一种工作单元的事务处理方法、装置、设备及介质
CN114816703A (zh) 一种任务处理方法、装置、设备及介质
CN111124695B (zh) 一种动效管理方法、系统及设备
Gu et al. Shared-stack cooperative threads
CN117032999B (zh) 一种基于异步运行时的cpu-gpu协同调度方法及装置
Zhao et al. Load balancing non-uniform parallel computations
CN116501474B (zh) 一种批量同质任务的处理系统、方法以及装置
CN111966479B (zh) 业务处理、风险识别业务处理方法、装置及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant