分布式计算方法、装置及系统与流程

文档序号:28954898发布日期:2022-02-19 11:32阅读:174来源:国知局
分布式计算方法、装置及系统与流程

1.本公开涉及计算领域,特别是涉及一种分布式计算方法、装置及系统。


背景技术:

2.mapreduce是指用于大规模数据并行化运算的编程模型和执行框架,mapreduce框架允许用户可以使用函数式编程的思想来表述作业处理逻辑,只要实现map(映射)、reduce(化简)即可提交实现分布式作业,而不用关心分布式并行化的细节。很多分布式平台都提供了mapreduce的编程接口,用户按照接口提供map、reduce程序的实现,执行框架会自动调用相关程序在分布式平台上并行执行,做大规模分布式运算。
3.shuffle机制是mapreduce框架的核心部分,包含数据分区、排序、缓存多个关键过程,包含数据从map阶段输出传递给reduce阶段输入的整个过程。
4.shuffle是连接map和reduce之间的桥梁。map的输出要传递到reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reducetask(reduce任务)需要跨节点去拉取其它节点上的maptask(map任务)结果。而这其中partitioner(分区器)是shuffle机制的核心,用于在shuffle阶段对maptask产生的中间结果进行分片,以便将同一分组的数据交给同一个reducetask处理。partitioner对分布式计算的性能和数据倾斜、负载均衡等影响至关重要。
5.现有技术中partitioner的分区算法都是由平台内置的,不能满足上层用户作业的个性化分区需求。


技术实现要素:

6.本公开要解决的一个技术问题是提供一种能够满足上层用户作业的个性化分区需求的方案。
7.根据本公开的第一个方面,提供了一种计算方法,包括:获取计算作业;将计算作业针对的待处理的数据切分为多个数据块;将计算作业划分为多个映射任务和一个或多个化简任务,并将映射任务和化简任务分配给多个工作节点,其中,每个映射任务对应一个数据块,分配了映射任务的第一工作节点用于对数据块进行处理,以得到中间处理结果,分配了化简任务的第二工作节点的输入来源于第一工作节点的输出;确定与计算作业相适配的分区方式,分区方式用于对多个映射任务产生的中间处理结果进行分区;基于确定的分区方式对第一工作节点的输出进行分区;将同一分区的中间处理结果分配给同一第二工作节点。
8.根据本公开的第二个方面,还提供了一种计算装置,包括:获取模块,用于获取计算作业;切分模块,用于将计算作业针对的待处理的数据切分为多个数据块;划分模块,用于将计算作业划分为多个映射任务和一个或多个化简任务,并将映射任务和化简任务分配给多个工作节点,其中,每个映射任务对应一个数据块,分配了映射任务的第一工作节点用于对数据块进行处理,以得到中间处理结果,分配了化简任务的第二工作节点的输入来源
于第一工作节点的输出;确定模块,用于确定与计算作业相适配的分区方式,分区方式用于对多个映射任务产生的中间处理结果进行分区;分区模块,用于基于确定的分区方式对第一工作节点的输出进行分区;分配模块,用于将同一分区的中间处理结果分配给同一第二工作节点。
9.根据本公开的第三个方面,还提供了一种计算系统,包括:客户端和服务端,客户端用于向服务端发送计算作业;服务端用于:获取计算作业;将计算作业针对的待处理的数据切分为多个数据块;将计算作业划分为多个映射任务和一个或多个化简任务,并将映射任务和化简任务分配给多个工作节点,其中,每个映射任务对应一个数据块,分配了映射任务的第一工作节点用于对数据块进行处理,以得到中间处理结果,分配了化简任务的第二工作节点的输入来源于第一工作节点的输出;确定与计算作业相适配的分区方式,分区方式用于对多个映射任务产生的中间处理结果进行分区;基于确定的分区方式对第一工作节点的输出进行分区;将同一分区的中间处理结果分配给同一第二工作节点。
10.根据本公开的第四个方面,提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一方面所述的方法。
11.根据本公开的第五个方面,提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一方面所述的方法。
12.由此,在利用mapreduce框架执行计算作业的过程中,通过确定与计算作业相适配的分区方式,基于所确定的分区方式对多个映射任务产生的中间处理结果进行分区,可以满足用户的个性化分区需求。
附图说明
13.通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
14.图1示出了根据本公开一个实施例的分布式计算系统的结构示意图。
15.图2示出了利用mapreduce框架执行计算作业的过程示意性流程图。
16.图3示出了本公开的分布式计算方法的示意性流程图。
17.图4示出了将mapreduce特性转换为sql特性后的作业执行流程图。
18.图5示出了根据本公开一个实施例的分布式计算装置的结构示意图。
19.图6示出了根据本公开的计算设备的结构示意图。
具体实施方式
20.下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
21.很多场景下需要通过设置自定义分区方式来满足个性化的作业需求。例如,很多
写文件作业需要精确输出文件个数及精确输出文件名称。如果是简单的分布式读写作业(如mapreduce的onlymap作业),可以直接按映射任务(即map任务)的数量和编号对应输出即可。但如果是涉及到表数据或文件数据的作业,通常需要将指定的数据输出到指定编号或命名的文件,即shuffle机制需要将指定的数据分发到指定数目编号的用于执行化简任务的工作节点(即reducer)去处理。类似的扩展场景是用户直接输出整型数据并且用该整型数据的数据值做分区器的key,并且设置了reducer数量,此时用户会默认数据平台支持按该key做分区。
22.针对诸如上述具有个性化分区需求的作业,如果作业执行过程中的shuffle机制是基于平台底层引擎内置的分区方式进行分区,那么在平台内置的分区方式重构了之后会造成数据错误甚至作业失败。
23.随着平台(如分布式大数据平台)的不断衍化升级和底层性能优化功能逐步丰富,平台不可避免地需要对内置的partitioner(分区器)进行升级改造。因此,如何在满足个性化分区需求的同时,使得平台内置分区器的重构不会影响上层处理逻辑,是平台不断衍进扩展中迫切需要解决的难题。
24.本公开整体上对分区算法进行重新梳理和架构,既能兼容原有的传统分区算法(如平台内置分区算法),又能支持用户自定义的分区算法。由此,通过解耦个性化的分区需求和底层平台的升级,使得对一些个性化分区需求的作业(如文件读写作业、需要将指定key的数据分发到指定的reduce task去执行的作业)均能够通过自定义的分区算法实现分区。对没有个性化分区需求的作业,仍可以使用平台内置的经过不断优化后的分区方式,以解决数据倾斜问题,实现负载均衡和性能提升。
25.图1示出了根据本公开一个实施例的计算系统的结构示意图。
26.如图1所示,计算系统包括客户端和服务端。客户端可以是指面向用户的客户端计算平台。服务端可以是指服务端计算平台。服务端可以实现为一种用于实现分布式计算的调度框架。用户可以通过客户端向服务端提交计算作业,服务端在接收到客户端提交的计算作业后,可以调用多个工作节点以分布式计算的方式执行计算作业。
27.分布式计算是指将大型计算任务进行拆解,使之变成小型计算任务,从而可以不局限于单机处理,而可以分布到若干机器汇总进行处理,解决了庞大数据无法在单机上运行处理或者说单机运行处理效率较低的情况。分布式计算把一组计算机通过网络相互连接组成分散系统,然后将需要处理的大量数据分散成多个部分,交由分散系统内的计算机组同时计算,最后将计算结果合并得到最终结果。
28.在本公开中,计算作业可以视为基于mapreduce的分布式作业。即,计算作业可以包括map(映射)任务和reduce(化简)任务。其中,计算作业的执行主要包括两个阶段:map阶段和reduce阶段。
29.图2示出了利用mapreduce框架执行计算作业的过程示意性流程图。
30.如图2所示,可以将输入(输入数据或输入文件)切分(split)为多份。切分后的多份输入可以交由多个mapper处理,mapper是指执行map任务的工作节点。
31.mapper执行完毕后可以利用分区算法确定mapper的输出所对应的reducer,reducer是指执行reduce任务的工作节点。其中,不同mapper所对应的分区算法相同,分区算法用于将mapper的输出进行分区(也即分片),以将mapper的输出分成多个分片,其中不
同分片的数据可以交由同一reducer处理。分区算法可以是但不限于hash算法,即可以通过计算哈希值的方式,将相同哈希值的输出交由同一reducer处理。
32.reduce阶段执行完毕后,可以将所有reducer的输出合并(merge),得到最终的输出结果。
33.图3示出了本公开的计算方法的示意性流程图。
34.如图3所示,服务端在获取到客户端提交的计算作业后,可以执行步骤s110,将计算作业针对的待处理的数据切分为多个数据块。关于数据块的切分方式不是本公开侧重点,这里不再赘述。
35.在步骤s120,可以由服务端将计算作业划分为多个映射任务和一个或多个化简任务,并将映射任务和所述化简任务分配给多个工作节点,其中,每个映射任务对应一个数据块,分配了映射任务的第一工作节点用于对数据块进行处理,以得到中间处理结果,分配了化简任务的第二工作节点的输入来源于第一工作节点的输出。其中,第一工作节点也即上文述及的mapper,第二工作节点也即上文述及的reducer,关于第一工作节点、第二工作节点的处理机制可以参见上文结合图1描述。关于mapper、reducer的处理机制也不是本公开侧重点,这里不再赘述。
36.服务端还可以执行步骤s130至步骤s150,以确定如何将mapper的输出传递给reducer。
37.在步骤s130,确定与计算作业相适配的分区方式。其中,分区方式可以视为一种分区算法。
38.本公开可以提供包括多个分区方式的分区方式集合。分区方式集合不仅可以包括平台内置的分区方式(如下文述及的default hash、legacy hash),还可以包括多种自定义分区方式(如下文述及的murmur hash、user defined hash)。其中内置的分区方式是指可以由平台持续改进的分区方式,自定义分区方式是指由用户或平台方根据特定需求生成的适用于特定场景的分区方式。以分区方式为hash算法为例,如下表所示,可以针对不同数据类型制定相应的hash生成器。
[0039][0040][0041]
hash算法是一个广义的算法,使用hash算法可以提高存储空间的利用率,可以提高数据的查询效率,也可以做数字签名来保障数据传递的安全性。分区器利用hash算法进行分区,是指将一个整体的数据根据hash值划分到不同的节点去存储传递,然后通过路由来寻找到指定的节点,进行数据的读写操作。hash算法包含哈希取模法,一致性哈希以及虚拟桶算法等,hash算法能够产生非常平衡的分区。
[0042]
可以通过hash仓库提供的hash组件来生成对应的hash工厂(也即hash算法)。如生成默认的hash工厂(default hash factory)、传统的hash工厂(legacy hash factory)、murmur的hash工厂(murmur hash factory)、用户自定义hash工厂(user defined hash factory)等。其中default hash factory、legacy hash factory是平台系统内置的,
default hash针对大多数没有特殊要求的作业,这类作业的底层hash算法可以根据特性由底层平台持续改进,如提供的hash算法可以支持交换律,这种情况下在逻辑物理优化下,尤其是基于代价的优化器cbo(cost base optimizer)可以进行非常复杂的变换和替换来做到相对较优的执行计划,而legacy hash factory则针对传统的hash算法。
[0043]
1、基于作业特性选择合适的分区方式
[0044]
可以从分区方式集合中选取与计算作业相适配的分区方式。
[0045]
例如,分区方式集合可以包括至少一个与特定数据类型对应的分区方式(为了便于区分,可以称为第一分区方式),每个第一分区方式可以对应一种或多种数据类型,第一分区方式可以视为针对特定数据类型制定的分区方式,如上文中示出的与不同数据类型对应的hash生成器。此时可以根据计算作业针对的数据的数据类型,从分区方式集合中选取与数据类型对应的第一分区方式。
[0046]
再例如,也可以根据计算作业的任务类型,从分区方式集合中选取与计算作业的任务类型相适配的分区方式。例如,可以分析计算作业的任务特性,根据任务特性从分区方式集合中选取与计算作业相适配的分区方式。
[0047]
2、指定分区方式
[0048]
用户还可以通过参数指定或hint(暗示)的方式为计算作业设置合适的分区方式。例如,用户可以通过诸如shuffle.partitioner.hasher.version=u dh[/legacy/murmur/default]的方式,设置shuffle机制所采用的hash算法。其中,udh是user defained hash的缩写,用于表示用户自定义hash。le gacy是指传统的hash算法,也即平台内置的hash算法。murmur是指查找特性的hash算法,default是指默认的hash算法。其中,当未指定has h算法时,可以默认使用default的hash算法。default的hash算法与leg acy的hash一样,由平台进行持续化优化,也即default采用的是平台持续优化过程中最新的hash算法。再例如,用户也可以通过手动添加hint来为计算作业设置合适的分区方式,其中hint用于改变sql执行计划,提高执行效率。
[0049]
由此,还可以获取第一参数配置信息,第一参数配置信息包括针对计算作业配置的分区方式;从分区方式集合中选取第一参数配置信息所表征的分区方式。其中,用户可以在提交计算作业时,为计算作业选择合适的分区方式,通过参数设置的方式生成第一参数配置信息,并通过客户端将其发送给服务端。
[0050]
另外,对于需要精确输出文件个数及精确输出文件名称的作业,例如对于需要将指定的数据输出到指定编号或命名的文件的作业,用户也可以仅提供包括数据值、reducer的数量以及数据值和reducer之间的对应关系的第二参数配置信息。此时服务端可以将数据值作为分区字段(即key),对mapper的输出进行分区,并将mapper的输出中与数据值对应的输出作为与数据值所对应的reducer的输入。由此,用户只需指定作为分区字段的数据值以及reducer数量,即可支持按照该数据值进行分区。
[0051]
3、自定义程序
[0052]
还可以向用户提供编程接口,用户可以通过编程接口提供自定义程序,如此可以获取用户通过编程接口提供的自定义程序,基于自定义程序,确定计算作业的分区方式。其中,自定义程序可以是分区器(partitioner)的接口实现程序,程序中包括对mapper的输出进行分区所使用的分区方式。
[0053]
举例来说,可以基于mapreduce程序的编程特性,提供自定义partitioner接口。用户可以通过对接口的参数进行制定的方式来指定计算作业所采用的分区方式,或者用户也可以通过提交partitioner接口的实现程序来指定计算作业所采用的分区方式。
[0054]
在步骤s140,基于确定的分区方式对第一工作节点的输出进行分区。
[0055]
对第一工作节点的输出进行分区,是指根据所确定的分区方式,将mapper的输出分成预定数量个区块。
[0056]
如上文所述,在map阶段可以利用多个mapper并行执行map任务。因此可以在任意一个mapper执行完毕后,使用分区方式将该mapper的输出分成预定数量个区块。
[0057]
在步骤s150,将同一分区的中间处理结果分配给同一第二工作节点。
[0058]
mapper的输出中属于相同分区的数据(即中间处理结果)可以交由同一reducer处理。其中,每个reducer用于处理一个分区的数据,reducer可能需要跨节点地从来自不同mapper的输出中获取该reducer所对应的分区下的所有数据。
[0059]
在确定了reducer的输入后,就可以由reducer对相应输入执行reduce任务。关于reduce阶段及其之后的执行过程可以参见上文相关描述,此处不再赘述。
[0060]
本公开述及的计算作业可以是mapreduce作业,也可以是sql作业。
[0061]
从分布式编程模型原理来看,mapreduce作业使用的是分治的mapreduce编程模型,分布式sql语言底层对应的是分布式关系型编程模型;mapreduce编程模型是分布式sql关系型编程模型的一种特殊情况。从分布式编程模型融合来看,mapreduce是一种简化的关系型语言;mapreduce模型接口可以对应到一种简化的关系型模型接口,对外只暴露了map和reduce两种接口,而关系型语言则可以提供更多的接口,如关联join、过滤filter等。
[0062]
因此本公开提出,可以将mapreduce编程模型转换为关系型语言sql编程模型。以mapreduce作业为例,可以将mapreduce作业转换为sql语句,如可以转换为sql语法中的sql算子,利用sql算子执行mapreduce作业。
[0063]
图4示出了将mapreduce特性转换为sql特性后的作业执行流程图。
[0064]
如图4所示,第一个foreach算子用于处理map操作(即用于执行map任务)。对于第一foreach算子的输出(也即mapper的输出),可以利用distributeby算子进行分区,其中在分区过程中还可以利用sortby算子。第二个foreach算子用于对属于同一分区的数据处理reduce操作即用于执行reduce任务)。最后可以将处理结果输出并存储到分布式文件系统。foreach算子、distributeby算子、sortby算子均为sql语法中的sql算子,关于foreach算子、distributeby算子、sortby算子的具体工作机制,本公开不再赘述。
[0065]
综上,本公开对计算平台的底层架构进行了统一设计和处理,mapreduce提交后原来的map reduce特性都被转换和替换为sql语法和sql算子。本公开提出和设计了复用了分布式sql的shuffle算子(对应sql语法为distributeby子句),在执行计划的逻辑过程中,该语法被转换为distributeby operator(即distributeby算子),在物理执行过程中替换该算子为对应shuffle运算符,该运算符的其中一个属性是shufflekey,即字段或者分区器的值,类似语法具有通用性。
[0066]
由此,如果用户作业是mapreduce作业,则可以增加一个distribute by子句执行和配置适配到分区器和分区字段,对分区器和分区字段进行包装,用明确数值的字段别名增加到sql子句中。以在mapreduce接口中的partitioncolumn指定了分区字段key和value
为例,可以将多个字段包装在一个分区器中,如可以通过distribute by__partition_id_子句的__partition_id_来作为别名来命名上面的partitioncolumn的key和value两个字段组合的分区器。
[0067]
用户作业也可以是分布式sql作业。分布式sql作业执行过程首先是把sql解析为抽象语法树并转换生成逻辑计划,逻辑计划是由关系算子组成的dag(有向无环图),然后把逻辑计划转换为物理执行计划在分布式计算平台上调度分布式运行。其中,可以利用用户自定义分区算法生成分区值,此时可以在外层的sql语句中调用用户针对作业设置的自定义程序进行处理。关于sql作业的执行过程可以参见上文结合图4的描述,此处不再赘述。
[0068]
本公开的计算方法还可以实现为一种计算装置。图5示出了根据本公开一个实施例的计算装置的结构示意图。其中,计算装置500的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图5所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
[0069]
下面就计算装置500可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文结合图1至图4的相关描述,这里不再赘述。
[0070]
参见图5,计算装置500包括获取模块510、切分模块520、划分模块530、确定模块540、分区模块550以及分配模块560。
[0071]
获取模块510用于获取计算作业;切分模块520用于将计算作业针对的待处理的数据切分为多个数据块;划分模块530用于将计算作业划分为多个映射任务和一个或多个化简任务,并将映射任务和化简任务分配给多个工作节点,其中,每个映射任务对应一个数据块,分配了映射任务的第一工作节点用于对数据块进行处理,以得到中间处理结果,分配了化简任务的第二工作节点的输入来源于第一工作节点的输出;确定模块540用于确定与计算作业相适配的分区方式,分区方式用于对多个映射任务产生的中间处理结果进行分区;分区模块550用于基于确定的分区方式对第一工作节点的输出进行分区;分配模块560用于将同一分区的中间处理结果分配给同一第二工作节点。
[0072]
确定模块540可以从分区方式集合中选取与所述计算作业相适配的分区方式,所述分区方式集合包括多个分区方式。作为示例,分区方式集合中至少存在至少一个第一分区方式,每个第一分区方式对应一种或多种数据类型,确定模块540可以根据计算作业针对的数据的数据类型,从分区方式集合中选取与数据类型对应的第一分区方式。作为示例,获取模块510还可以获取第一参数配置信息,第一参数配置信息包括针对计算作业配置的分区方式。确定模块540还可以从分区方式集合中选取第一参数配置信息所表征的分区方式。作为示例,确定模块540还根据计算作业的任务类型,从分区方式集合中选取与计算作业的任务类型相适配的分区方式,如确定模块540可以分析所述计算作业的作业特性,根据作业特性,从分区方式集合中选取与计算作业相适配的分区方式。
[0073]
作为示例,计算装置500还可以包括提供模块,用于提供编程接口。获取模块510还可以用于获取用户通过所述编程接口提供的自定义程序。确定模块540还可以基于自定义程序确定计算作业的分区方式。
[0074]
作为示例,获取模块510还可以用于获取第二参数配置信息,第二参数配置信息包括一个或多个数据值。确定模块540可以将所述数据值作为分区字段。分区模块550可以按
照分区字段对第一工作节点的输出进行分区。可选地,第二参数配置信息还包括第二工作节点的数量以及数据值和第二工作节点之间的对应关系,分配模块560可以将第一工作节点的输出中与数据值对应的输出作为与数据值对应的第二工作节点的输入。
[0075]
计算作业可以为mapreduce作业或sql作业。计算装置还可以包括转换模块。若计算作业为mapreduce作业,则可以由转换模块将mapreduce作业转换为sql语句,如可以将mapreduce作业转换为sql语法中的sql算子,此时可以利用sql算子执行mapreduce作业。关于利用sql算子执行mapreduce作业过程可以参见上文结合图4的描述,此处不再赘述。
[0076]
图6示出了根据本公开一实施例可用于实现上述分布式计算方法的计算设备的结构示意图。
[0077]
参见图6,计算设备600包括存储器610和处理器620。
[0078]
处理器620可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器620可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。在一些实施例中,处理器620可以使用定制的电路实现,例如特定用途集成电路(asic,application specific integrated circuit)或者现场可编程逻辑门阵列(fpga,field programmable gate arrays)。
[0079]
存储器610可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器620或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器610可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器610可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd-rom,双层dvd-rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、min sd卡、micro-sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
[0080]
存储器610上存储有可执行代码,当可执行代码被处理器620处理时,可以使处理器620执行上文述及的分布式计算方法。
[0081]
上文中已经参考附图详细描述了根据本公开的分布式计算方法、装置、系统及设备。
[0082]
此外,根据本公开的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本公开的上述方法中限定的上述各步骤的计算机程序代码指令。
[0083]
或者,本公开还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本公开的上述方法的各个步骤。
[0084]
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
[0085]
附图中的流程图和框图显示了根据本公开的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0086]
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1