分布式任务处理方法和装置与流程

文档序号:11233919阅读:994来源:国知局
分布式任务处理方法和装置与流程
本申请涉及计算机应用
技术领域
,特别涉及分布式任务处理的方法和装置。
背景技术
:在分布式环境下,一个待处理的分布式任务通常会被拆分成多个子任务,并将拆分后得到的各个子任务分发到若干计算节点进行处理。现有技术中,在分布式环境中进行的子任务处理方法一般通过控制节点和计算节点来实现,具体可以包括下述过程:控制节点与各个计算节点建立心跳连接,以获取各个计算节点的健康状态信息(例如:数据库连接数、cpu占用率及内存使用率等)。控制节点根据获取的各个计算节点的健康状态信息,将任务池中预先存储的各子任务分发到相应的计算节点进行处理。其中,任务池中的各子任务是通过将待处理的分布式任务进行拆分得到的。可见,在现有技术中,必须通过控制节点来将任务池的各子任务分发到各个计算节点进行处理。其中,由于每个计算节点需与控制节点建立心跳连接,这就导致计算节点群的规模受限于上述控制节点的运算能力。技术实现要素:本申请实施例的目的是提供一种分布式任务处理方法及装置,用以解决现有技术存在的计算节点群的规模受限于上述控制节点的运算能力的问题。为解决上述技术问题,本申请实施例提供的分布式任务处理方法及装置是这样实现的:一种分布式任务处理方法,包括:计算节点通过守护进程监测该计算节点的至少一个健康指标值;计算节点根据所述健康指标值及与该健康指标值对应的预设阈值,判断该计算节点是否具有从预先存储有若干子任务的任务池中领取子任务的权限;其中,所述子任务是通过将待处理的分布式任务进行拆分得到的;若该计算节点具有领取子任务的权限,计算节点从所述任务池中领取至少一个子任务;计算节点生成与领取到的子任务对应的任务线程并利用该任务线程执行该子任务。一种分布式任务处理装置,包括:获取单元,用于通过守护进程监测该计算节点的至少一个健康指标值;判断单元,用于根据所述健康指标值及与该健康指标值对应的预设阈值,判断该计算节点是否具有从预先存储有若干子任务的任务池中领取子任务的权限;其中,所述子任务是通过将待处理的分布式任务进行拆分得到的;领取单元,用于在计算节点具有领取子任务的权限时,从所述任务池中领取至少一个子任务;生成单元,用于生成与领取到的子任务对应的任务线程并利用该任务线程执行该子任务。由以上本申请实施例提供的技术方案可见,本申请实施例通过计算节点根据自身健康指标值来确定是否可以从任务池中领取子任务,在满足领取子任务的条件时进行领取动作并随后对领取到的子任务进行处理。与现有技术相比,本申请实施例通过计算节点主动地进行任务领取动作,无需额外设置用以与各计算节点进行心跳连接并进行任务分发的控制节点,从而避免控制节点对计算节点群的规模的限制,使得计算节点群的规模更加灵活。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例中的包含若干计算节点的任务处理装置的框架图;图2为本申请实施例中的包含若干计算节点的任务处理装置的示意图;图3为本申请一实施例中提供的分布式任务处理的方法的流程图;图4为本申请一实施例中提供的分布式任务处理的装置的模块示意图。具体实施方式为了使本
技术领域
的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。图1为本申请实施例中的包含若干计算节点的任务处理装置的框架图,如图1所示,该任务处理系统包括一个或多个计算节点101、一个或多个任务池102,及用以连接上述计算节点101和上述任务池102的网络103。所述计算节点101可以通过网络103向任务池102领取待处理的子任务。所述计算节点101可以是一个具有计算或处理任务能力的处理装置,也可以是由多个具有处理任务能力的处理装置组成的集群。处理装置可以包括各类型的用来执行指令、处理进程或线程的处理器或微处理器。所述任务池102可以是一个具有存储能力的存储装置(例如数据库),也可以是由多个存储装置组成的集群。任务池102中可以存储的数据可以包括例如待处理分布式任务的数据、待处理分布式任务拆分后的子任务的数据等。任务池102中的应用可以与由开发者提供的应用程序对应。应用可以包括例如移动应用、超文本标记语言5(html5)应用、桌面应用和/或其它应用。上述网络103可以包括例如局域网(lan)、广域网(wan)、内部网、互联网、移动电话网络、虚拟专用网(vpn)、蜂窝式或其它移动通信网络、蓝牙、nfc或其任何组合。本申请实施例的网络化环境下,若干计算节点101可以通过网络103向任务池102获取子任务。所述子任务预先由分布式任务拆分并存储于该任务池102中。待所述若干计算节点101将领取的子任务处理完成后,通过网络103提交至所述任务池102。图2为本申请实施例中的包含若干计算节点的任务处理装置的示意图。该示意图中包括一个或若干计算机点101、任务池102。该示意图能更清楚的示意出所述任务池102中包括由分布式任务拆分而得的若干子任务,所述计算节点101分别向所述任务池102获取子任务。如图3所示,为本申请一实施例中提供的一种分布式任务处理的方法的流程图。本实施例中,所述分布式任务处理的方法包括如下步骤:s210:计算节点通过守护进程监测该计算节点的至少一个健康指标值。所述守护进程,可以是与计算节点的用以处理子任务的程序或代码对应的实体。若用以处理子任务的计算节点包括不止一个时,每个计算节点分别运行一个守护进程。所述子任务是通过将待处理的分布式任务进行拆分得到的,并预先存储于所述任务池中。本申请实施例中,所述守护进程可以用于监测其所在计算节点的可用资源的健康指标值,可以用于对比所述监测的健康指标值与其对应的阈值,并根据对比结果,确定该计算节点是否可以向任务池领取子任务。本申请实施例中,所述计算节点向任务池领取子任务之前,首先开启守护进程。若有不止一个计算节点,来共同完成任务池中的子任务,则所述不止一个计算节点,在向所述任务池获取子任务之前,分别开启各自的守护进程。所述计算节点的健康指标值可以包括该计算节点的数据库连接数、cpu占用率及内存使用率该计算节点连接下述任务池的网络带宽、计算节点正在处理的子任务数、该计算节点的剩余内存等。s220:根据所述健康指标值及与该健康指标值对应的预设阈值,判断该计 算节点是否具有领取子任务的权限。所述与健康指标值对应的预设阈值,由计算节点预先设置。具体的,计算节点根据任务池中存储的子任务需消耗计算节点的资源量,确定与健康指标值对应的预设阈值。若所述健康指标值用以表征所述计算节点的资源耗用情况(如当前计算节点的cpu占用率),通过判断所述健康指标值是否小于与该健康指标值对应的预设阈值(例如,计算节点的cpu占用率的阈值),若是,确定该计算节点具有领取子任务的权限,则该计算节点可以向任务池领取子任务,反之该计算节点不能领取子任务。若所述健康指标值用以表征所述计算节点的可用资源量(如当前计算节点的内存),通过判断所述健康指标值是否大于与该健康指标值对应的预设阈值,确定该计算节点具有领取子任务的权限,则该计算节点可以向任务池领取,反之该计算节点不能领取子任务。所述健康指标值对应的预设阈值,可以是单个健康指标值的阈值,也可以是多个健康指标值的综合阈值。具体的,计算机点根据子任务涉及或主要涉及的消耗计算节点的资源量而决定。下面结合例子对所述健康指标值用以表征所述计算节点的资源耗用情况加以说明。例如,任务池中的待处理的子任务对计算节点的要求为:计算节点的cpu占用率为70%及以上,就不可以领取并处理该任务池中的子任务。那么计算节点在设置阈值时,便可以设置cpu占用率的阈值为70%(或0.7)。本实施例中,上述步骤s210中所述计算节点的守护进程需要监测的健康指标值,监测该计算节点的cpu占用率的健康指标值即可。若守护进程监测到其所在计算节点a的cpu占用率为50%,那么该计算节点根据监测到的该计算节点a的cpu占用率的健康指标值(即cpu占用率50%)及与预设的cpu占用率的阈值(即70%),判断该计算节点是否具有领取子任务的权限,具体的通过判断监测到的该计算节点a的cpu占用率健康指标值是否小于预设的cpu占用率的阈值。再例如,根据某种规则,确定某计算节点在同一时间最多可以处理的子任 务个数10个,即可以预设该计算节点正在处理子任务数的阈值为10,该计算节点的守护进程对该计算节点进行监测时,监测该计算节点正在处理的子任务的个数的健康指标值即可。若该计算节点的守护进程监测到该计算节点正在处理的子任务的个数为6(即该计算节点正在处理的子任务的健康指标值为6),则该计算节点根据监测到的该计算节点正在处理的子任务的健康指标值6与该计算节点可同时处理子任务个数的阈值10,判断该计算节点是否具有领取子任务的权限,具体的通过判断该计算节点正在处理的子任务的健康指标值是否小于可同时处理子任务个数的阈值。所述正在处理子任务数的阈值,可以通过计算节点的至少一个用以表征该计算节点的最大资源量的第一资源值(比如该计算节点的内存),及任务池中的子任务至少需要消耗计算节点的资源量的第二资源值(比如每个子任务至少需要消耗的内存)确定与该计算节点对应的正在处理子任务数的阈值。比如,若某一计算节点的内存为100gb,任务池中的子任务至少需要消耗计算节点的内存为10gb,那么所述该计算节点对应的正在处理子任务数的阈值可以通过该计算节点的内存100gb除以任务池中的子任务至少需要消耗计算节点的内存为10gb,从而确定该计算节点对应的正在处理子任务数的阈值为10。那么该计算节点最多可以同时领取并处理10个子任务。同样,任务池中的子任务至少需要消耗计算节点的内存为3gb,那么该内存为100gb计算节点对应的正在处理子任务数的阈值为33。下面结合例子对所述健康指标值用以表征所述计算节点的可用资源量的情况加以说明。例如,任务池中的待处理的子任务对计算节点的要求为:只要达到内存为20mb以上,就可以领取并处理该任务池中的子任务。那么计算节点在设置阈值时,便可以设置阈值为20mb。本实施例中,上述步骤s210中所述计算节点的守护进程需要监测的健康指标值时,监测当前该计算节点的内存的健康指标值即可。若计算节点的守护进程监测到,该计算节点的当前内存为50mb。那么该计算节点根据监测到的该计算节点的内存的健康指标值 50mb,及与预设的内存的阈值(即20mb),判断该计算节点是否具有领取子任务的权限,具体的通过判断监测到的该计算节点内存的健康指标值是否大于预设的内存的阈值。同样,若任务池中待处理的子任务对计算节点的要求中,同时包括计算节点的内存和cpu。则计算节点预设的阈值可以为,通过一定的算法计算而得的内存和cpu的综合阈值,也可以直接设置这两个健康指标值的两个阈值。相应的,上述步骤s210中所述计算节点的守护进程需要监测的健康指标值,需要监测该计算节点的内存和cpu的两个健康指标值,并进行相应的判断。s230:若是,该计算节点从所述任务池中领取至少一个子任务。参照上述步骤s220中预设的阈值为cpu占用率70%,守护进程监测到其所在计算节点的cpu占用率为50%的例子,计算节点通过判断所述计算节点的cpu占用率为50%小于预设的阈值cpu占用率70%,那么该计算节点可以向任务池领取子任务。此处需要说明的是,若另一计算节点b,其守护进程监测到计算节点b的cpu占用率为70%,那么该计算节点不可以向任务池领取子任务。参照上述步骤s220中预设的阈值为内存为20mb,守护进程监测到其所在计算节点的内存为50mb的例子,计算节点通过判断所述计算节点的内存50mb大于预设的阈值20mb,那么该计算节点可以向任务池领取子任务。通过守护进程监测到的其所在计算节点的健康指标值,与所述健康指标值对应的阈值对比,可以判断出计算节点是否可以向任务池领取子任务。在判断出计算节点可以向任务池领取子任务之后,还可以通过对比该计算节点正在处理的子任务数与该计算节点的正在处理子任务数的阈值,确定该计算节点最多还可以同时领取多少子任务。具体的,该计算节点可以最多同时领取的子任务数,可以通过该计算节点的正在处理子任务数的阈值减去监测到的该计算节点正在执行的子任务数得到。同样结合步骤s220中,某计算节点预设的可领取的正在处理子任务数的阈值为10,该计算节点的守护进程监测到的该计算节点 正在处理的子任务数为6,则该计算节点可以继续领取子任务,且该计算节点最多还可以同时领取4个子任务。需要说明的是,若所述守护进程判断出其所在计算节点不可以向任务池领取子任务时(例如该计算节点的cpu占用率大于或等于预设的cpu占用率对应的阈值),则该计算节点的守护进程会根据预先配置的等待时长,进行等待。之后,该守护进程可以继续对其所在计算节点的健康指标值进行检测。任务池中通过拆分分布式任务生成若干个子任务时,相应的生成与每个子任务对应的若干个子任务的状态信息。所述子任务的状态信息包括可以被计算节点的子任务锁锁定的状态信息。所述计算节点向任务池领取子任务时,该计算节点可以通过乐观锁定的方式领取子任务。具体的,计算节点的守护进程生成与领取到的子任务对应的子任务锁信息。所述子任务锁信息包含领取该子任务的计算节点的标识id(例如当前计算节点的主机名或ip地址)及锁定该子任务的时间戳。计算节点利用所述子任务锁信息对领取到的子任务的状态信息进行更新。子任务的状态信息可以包括:最新子任务锁、最近锁定时间、被锁定次数、当前任务状态。所述最新子任务锁的信息即为当前锁定该子任务的子任务锁信息。若最新子任务锁对应的信息不为空,则其对应的信息为当前领取该子任务的计算节点的子任务锁信息,若最新子任务锁对应的信息为空,则表示当前时刻没有任何计算节点锁定该子任务。所述最近锁定时间为计算节点锁定该子任务后更新的最新时间。被锁定次数,表示该子任务被计算节点领取和锁定几次;若被锁定次数为零时,表示该子任务还未被任何计算节点领取过,若被锁定次数为若被锁定次数不为零,其对应的数据为几,则表示该子任务被锁定几次。当前任务状态,表示子任务当前处于的状态信息,可用包括可用、执行、成功等状态。若某子任务的当前任务状态为可用,则表示该子任务可以别计算节点领取和锁定;若当前任务状态为执行,则表示该子任务当前已被计算节点领取和锁定,当前不可被其他计算节点领取;若当前任务状态为成功,则该子任务 被处理完成,该子任务将从任务池中结束,不会再被任何计算节点领取。所述子任务的状态信息的更新可以用以表征该子任务被某计算节点锁定的过程。例如,某计算节点的守护进程生成的子任务锁在锁定某子任务之前,该子任务的状态信息可以如表1所示:表1:子任务被锁定之前的状态信息最新子任务锁最近锁定时间被锁定次数当前任务状态nullnull0可用如表1中所示的该子任务的当前任务状态为“可用”,表示该子任务可以被任意计算节点领取。表1中被锁定的次数为“0”,表示该子任务没有被任何一个计算节点领取并锁定过,其对应的最近锁定时间为空,其对应的最新子任务锁的信息也为空。表1中最新子任务锁的信息为空,表示当前时刻该子任务没有被任何计算节点领取和锁定。当子任务锁定成功后,所述子任务的状态信息可以如表2所示:表2:子任务被锁定成功的状态信息最新子任务锁最近锁定时间被锁定次数当前任务状态xx.com:145334565898914533456589891执行表2所示的第一列中“xx.com:1453345658989”为锁定该子任务的子任务锁信息。其中“xx.com”为当前锁定该子任务的计算节点的标识id,“1453345658989”为当前锁定该子任务时的时间戳。最近锁定时间“1453345658989”为该子任务被锁定时更新。相应的,当前该子任务被锁定的次数为1。该子任务状态信息中的当前任务状态为“执行”,表示该子任务已被领取和锁定,并且当前任务状态下,该子任务不能被其他计算节点所领取。所述超时时长为预先配置的用于表征计算节点领取子任务后该计算节点正常工作的有效时间。计算机点通过心跳更新最近锁定的时间。若计算节点领取子任务后在所述的超时时长内计算节点没有更新最近锁定时间,则可以表征该计算节点在超时时长内没能正常工作,该计算节点已不可用。那么被该计算 节点领取的子任务可以重新被领取。若所述计算节点在领取该子任务后,在所述超时时长内有更新最近锁定时间,则表征该计算节点仍处于正常工作状态,该计算节点可以正常领取和处理子任务。需要说明的是,通过子任务锁来锁定和领取子任务,保证了每个子任务在同一时间内,只能被一个计算节点领取和处理,这样避免了子任务被重复领取和重复处理的情况,提高了子任务的领取效率和处理效率。需要说明的是,可以将计算节点设置为同一时间内只能向任务池领取一个任务,也可以将计算节点设置为同一时间内可以向任务池领取多个任务。若计算节点同时向任务池领取多个任务时,该计算节点的守护进程,可用生成多个子任务锁信息。所述多个子任务锁,分别向任务池锁定子任务。s240:计算节点生成与领取到的子任务对应的任务线程并利用该任务线程执行该子任务。计算节点在领取子任务后,生成与该子任务对应的任务线程,并利用该任务线程对该子任务进行处理。通过这种异步线程的方式实现对子任务的获取和处理。计算节点内部可以设置一个更新时长,用于更新最近锁定时间。该更新时长一般不大于上述预设的超时时长。计算节点领取子任务后,每隔一个更新时长,该计算节点会判断领取到的子任务是否在所述子任务锁信息中的锁定该子任务的时间戳之后的预设的更新时长内执行完毕;若否,计算节点判断该子任务是否在执行中;若该子任务在执行中,计算节点将领取到的子任务的状态信息中的最近锁定时间的时间戳更新为当前时间戳。若由于子任务在被计算节点领取超过超时时长而未被执行,或子任务在执行过程中出现异常等情况而导致子任务执行失败的,计算节点将该子任务的状态信息中的子任务锁信息(即表2中最新子任务锁)和最近锁定时间进行清空,并将该子任务的当前任务状态置于可用,其被锁定次数不做调整。子任务在执行失败后至重新设置为可用的状态的阶段,为子任务的重置阶 段。具体的,在子任务的重置阶段,计算节点可以通过任务线程的操作,实现子任务的重置。具体的,子任务执行失败所在的任务线程预设一个重试时间间隔,接着该任务线程在等待重试时间间隔后,将该子任务的子任务锁信息和最近锁定时间进行清空,并将该子任务的当前任务状态重置为可用。在该子任务被重置为可用后,符合领取该子任务条件的计算节点均可领取该子任务。本申请实施例中,设置重试时间隔,可以使得领取失败或执行失败的子任务有一个调整和修复的时间,可以提高该子任务再次被领取和处理的成功率。所述重试时间间隔,可以根据子任务的状态灵活设置。若子任务不需要做相应的调整,也可以将重试时间间隔设置为零。这样,领取失败或执行失败的子任务,可以立刻被重置为可领取的子任务。如表3所述为重置后的子任务状态信息:表3:子任务被重置后的状态信息最新子任务锁最近锁定时间被锁定次数当前任务状态nullnull1可用表3中可以看出,重置后的子任务的状态信息中的最新子任务锁信息为空,表示该子任务被重置时之前锁定该子任务的计算节点的子任务锁信息被清空,待下一次被计算节点锁定时,更新为锁定该子任务的计算节点的子任务锁信息。最近锁定时间也被清空,待下一次被计算节点锁定时更新最近锁定时间。被锁定次数没有被重置。当前任务状态重置为可用,表示重置后的子任务,当前时刻为可以被计算节点领取和锁定。本申请实施例中,计算节点在领取到的子任务被执行完毕后,将与该子任务对应的状态信息中的当前任务状态更新为成功;计算节点可以逐一检查所述任务池中包含的每个子任务对应的状态信息中的当前任务状态是否为成功;若是,计算节点确定所述待处理的分布式任务执行完毕。需要说明的是,每一个被执行完毕后的子任务,其在任务池中生命周期也随即结束,该子任务不会再被其他计算节点领取和处理。所述计算节点检查所述任务池中的每个子任务是否执行完毕,还可以是在该计算节点判断领取到的子任务均执行完毕后,向任务池提交已完成的子任务,并进行下一轮子任务的领取,而领取子任务失败的情况下进行的。本申请实施例,计算节点通过守护进程对自身健康指标值监测,并根据健康指标值对应的预设阈值,判断该计算节点是否可以获取子任务。在满足领取子任务的条件下,计算节点向任务池获取子任务并进行处理。与现有技术相比,本申请实施例中这种计算节点主动地进行任务领取动作,无需额外设置用以与各计算节点进行心跳连接并进行任务分发的控制节点,从而避免控制节点对计算节点群的规模的限制,使得计算节点群的规模更加灵活。且本申请实施例中,计算节点通过守护进程生成的子任务锁信息,向任务池获取子任务。计算节点的这种通过锁机制领取子任务,并采用异步线程的方式实现对子任务的获取和处理的方法,可以大大提高分布式任务处理效率。本申请实施例还提供一种分布式任务处理的装置,可以实现上述的方法步骤,且该装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过服务器的cpu(centralprocessunit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。图4为本申请一实施例中的分布式任务处理装置的模块示意图。其中,该装置中的各个单元实现的功能与上述方法中包含的各个步骤实现的功能类似,故该装置中的各个单元可以参照上述方法中的各个步骤的具体内容。本实施例中,与上述方法对应的,所述装置包括:获取单元301,用于通过守护进程监测该计算节点的至少一个健康指标值;判断单元302,用于根据所述健康指标值及与该健康指标值对应的预设阈值,判断该计算节点是否具有从预先存储有若干子任务的任务池中领取子任务的权限;其中,所述子任务是通过将待处理的分布式任务进行拆分得到的;领取单元303,用于在计算节点具有领取子任务的权限时,从所述任务池中领取至少一个子任务;生成单元304,用于生成与领取到的子任务对应的任务线程并利用该任务线程执行该子任务。如图4所示的分布式任务处理装置,所述装置还包括:子任务锁生成单元,用于通过守护进程生成与领取到的子任务对应的子任务锁信息;其中,所述子任务锁信息包含领取该子任务的计算节点的标识id及锁定该子任务的时间戳;子任务状态更新单元,用于利用所述子任务锁信息对领取到的子任务的状态信息进行更新。如图4所示的分布式任务处理装置,所述装置还包括:任务执行状态判断单元,用于判断领取到的子任务是否在所述子任务锁信息中的锁定该子任务的时间戳之后的预设更新时长内执行完毕。如图4所示的分布式任务处理装置,所述装置还包括:阈值确定单元,用于根据任务池中存储的子任务需消耗计算节点的资源量,确定与健康指标值对应的预设阈值。如图4所示的分布式任务处理装置,所述装置还包括:更新单元,用于在领取到的子任务执行完毕后,将与该子任务对应的状态信息中的当前任务状态更新为成功;任务检查单元,用于逐一检查所述任务池中包含的每个子任务对应的状态信息中的当前任务状态是否为成功。本申请实施例,计算节点通过获取单元对自身健康指标值监测,判断单元根据健康指标值对应的预设阈值,判断该计算节点是否可以获取子任务。在满足领取子任务的条件下,计算节点的领取单元向任务池获取子任务,并通过处理单元生成任务线程对所述子任务进行处理。与现有技术相比,本申请实施例中这种计算节点的领取单元主动地进行任务领取动作,无需额外设置用以与各计算节点进行心跳连接并进行任务分发的控制节点,从而避免控制节点对计算节点群的规模的限制,使得计算节点群的规模更加灵活。且本申请实施例中, 计算节点通过子任务锁生成单元生成的子任务锁信息,向任务池获取子任务。计算节点的这种通过锁机制领取子任务,避免不同计算节点之间重复领取同一个子任务,从而大大提高分布式任务处理效率。上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个 流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、 光学存储器等)上实施的计算机程序产品的形式。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1