技术领域
[0001] 本
发明涉及计算机技术领域,特别是涉及一种任务处理方法和任务调度器。
背景技术
[0002] 目前,我们会把一些任务放到后台程序处理,但是后台程序处理任务会存在以下问题:
[0003] 首先,为了避免多个
进程同时运行造成任务的重复执行,后台程序只能同一时刻运行一个进程,所以有很多后台程序都是部署一个进程。在这种情况下,若执行这个进程的程序出现故障,将会使后台程序处于不能提供服务的空闲状态,所以这种部署一个进程的情况造成后台程序不能提供服务的时间增多,相应地,提供服务的可用时间减少,造成低可用问题;其次,为了测试后台程序可以接受的
请求阈值,我们往往需要对后台程序进行压测,实现压测的最好方式就是启动多个线程同时请求提高并发数,但是问题是单机环境下可以启动的线程数量是有限的,可能远远达不到压测的效果;最后,若将定时任务、实时处理任务放到后台程序处理,后台程序为因为集成的任务数太多导致单机负载过高。
发明内容
[0004] 本发明
实施例的目的在于提供一种任务处理方法和任务调度器,以实现解决后台程序在处理任务时出现的低可用问题、可启动的线程数量有限的问题以及单机负载过高的问题。具体技术方案如下:
[0005] 在本发明实施的第一方面,首先提供了一种任务处理方法,应用于任务调度器,所述方法包括:
[0006] 所述任务调度器将待执行任务封装为多线程任务;所述任务调度器由
服务器从多个单机中确定;
[0007] 所述任务调度器将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务;所述执行机为所述多个单机中的其中一个单机。
[0008] 可选地,所述任务调度器将所述多线程任务分配给预先确定的执行机,包括:
[0009] 所述任务调度器通过反射的方法从根据所述多线程任务创建的对象中获取参数信息;
[0010] 所述任务调度器通过远程过程调用协议将包括所述参数信息的多线程任务分配给预先确定的执行机,以使所述执行机根据所述参数信息反射执行所述多线程任务。
[0011] 可选地,所述任务调度器将待执行任务封装为多线程任务,包括:
[0012] 所述任务调度器将待执行任务写入到多线程任务
接口中,所述多线程任务接口包括Runnable接口、Callable接口中的一种。
[0013] 可选地,所述执行机通过以下方法预先确定:
[0014] 所述任务调度器将所述多个单机中执行任务次数最少的一个单机确定为执行机;
[0015] 或,
[0016] 所述任务调度器通过预先定义的调度
算法从所述多个单机中确定执行机。
[0017] 可选地,所述多线程任务包括紧急度参数和重要度参数,所述任务调度器通过预先定义的调度算法从所述多个单机中确定执行机,包括:
[0018] 在所述任务的紧急度参数大于或等于紧急度阈值的情况下,所述任务调度器将所述多个单机中网络延迟小于第一阈值的单机确定为执行机;
[0019] 在所述任务的重要度参数大于或等于重要度阈值的情况下,所述任务调度器将所述多个单机中执行任务成功率大于或等于第二阈值的单机确定为执行机。
[0020] 可选地,在所述任务调度器将所述多线程任务分配给预先确定的执行机之后,还包括:
[0021] 若确定所述执行机执行任务异常,则所述任务调度器将所述执行机异常时正在执行的任务分配给其他单机。
[0022] 可选地,所述任务调度器是从服务器创建的有
序列表中确定的,所述有序列表是通过对所述多个单机按照预设特征排序得到的。
[0023] 在本发明实施的第二方面,还提供了一种任务调度器,所述任务调度器包括:
[0024] 封装模
块,用于将待执行任务封装为多线程任务;所述任务调度器由服务器从多个单机中确定;
[0025] 第一分配模块,用于将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务;所述执行机为所述多个单机中的其中一个单机。
[0026] 可选地,所述第一分配模块,包括:
[0027] 获取子模块,用于通过反射的方法从根据所述多线程任务创建的对象中获取参数信息;
[0028] 第一分配子模块,用于通过远程过程调用协议将包括所述参数信息的多线程任务分配给预先确定的执行机,以使所述执行机根据所述参数信息反射执行所述多线程任务。
[0029] 可选地,所述封装模块,包括:
[0030] 写入子模块,用于将待执行任务写入到多线程任务接口中,所述多线程任务接口包括Runnable接口、Callable接口中的一种。
[0031] 可选地,所述执行机通过以下模块预先确定:
[0032] 第一确定模块,用于将所述多个单机中执行任务次数最少的一个单机确定为执行机;
[0033] 或,
[0034] 第二确定模块,用于通过预先定义的调度算法从所述多个单机中确定执行机。
[0035] 可选地,所述多线程任务包括紧急度参数和重要度参数,所述第二确定模块,包括:
[0036] 第一确
定子模块,用于在所述任务的紧急度参数大于或等于紧急度阈值的情况下,将所述多个单机中网络延迟小于第一阈值的单机确定为执行机;
[0037] 第二确定子模块,用于在所述任务的重要度参数大于或等于重要度阈值的情况下,将所述多个单机中执行任务成功率大于或等于第二阈值的单机确定为执行机。
[0038] 可选地,所述任务调度器还包括:
[0039] 第二分配模块,用于若确定所述执行机执行任务异常,则将所述执行机异常时正在执行的任务分配给其他单机。
[0040] 可选地,所述任务调度器是从服务器创建的有序列表中确定的,所述有序列表是通过对所述多个单机按照预设特征排序得到的。
[0041] 在本发明实施的第三方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如第一方面所述的任务调度方法。
[0042] 在本发明实施的第四方面,还提供了一种包含指令的
计算机程序产品,当其在计算机上运行时,使得计算机执行如第一方面所述的任务调度方法。
[0043] 本发明实施例提供的任务处理方法和任务调度器,通过任务调度器将待执行任务封装为多线程任务,任务调度器将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务,所述执行机为所述多个单机中的其中一个单机,可以使多个单机组成的分布式系统中的一个单机接收多线程任务,从而增加了单机提供服务的时间,达到了高可用的效果;并且因为多个单机均可执行任务,相比于一个单机执行任务提高了同一时间可以启动的线程数量,达到了压测的效果;此外,因为任务调度器可将任务分配给多个单机执行,可以减少一个单机上集成的任务数,从而降低了单机负载。
附图说明
[0044] 为了更清楚地说明本发明实施例或
现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
[0045] 图1为本发明实施例中提供的任务处理方法的
流程图之一;
[0046] 图2为本发明实施例中提供的任务处理方法的流程图之二;
[0047] 图3为本发明实施例中提供的任务处理方法的示意图;
[0048] 图4为本发明实施例中提供的任务调度器的结构
框图之一;
[0049] 图5为本发明实施例中提供的任务调度器的结构框图之二;
[0050] 图6为本发明实施例中提供的一种
电子设备的结构框图。
具体实施方式
[0051] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
[0052] 图1为本发明实施例中提供的任务处理方法的流程图之一。所述方法应用于任务调度器,所述方法具体包括以下步骤。
[0053] 步骤101,所述任务调度器将待执行任务封装为多线程任务;所述任务调度器由服务器从多个单机中确定。
[0054] 在本发明实施例中,多个单机和任务调度器组成一个分布式系统,以实现分布式处理任务。分布式处理任务的方法其实就是将一个或一批任务分散到多个单机上执行。多线程处理任务的方法是指在单个机器上同一时间运行多个独立的程序
片段。分布式处理中执行任务的单位是单个机器(本发明实施例中称为单机),多线程处理中执行任务的单位是线程,为了增加单机提供服务的时间、提高单机可运行的线程数量、同时降低多线程处理任务时的单机负载,我们可以将多线程处理与分布式处理进行融合。即,将待执行的任务封装为多线程任务,并交付于分布式系统进行处理。这样,一方面可以提高单机提供服务的时间,达到高可用的效果,提高单机可以启动的线程数量;另一方面由于任务分配给分布式系统执行,也可以减少单机上集成的任务数,降低单机负载。
[0055] 在本发明实施例中,首先,搭建包括多个单机的分布式系统,为了降低系统的故障率,多个单机可以设置在不同的网络环境中;若单机数量有限,也可以将分布式系统的
节点设置在同一台单机的不同端口上。本发明实施例中以分布式系统的节点为多个单机为例进行详细论述。
[0056] 分布式系统要实现分布式调用,需要确定任务调度器。为了保证真正的高可用,即任务调度器出现异常之后保证会有可靠的候补单机作为新的任务调度器,服务器可以从分布式系统的多个单机中确定一个任务调度器。在当前任务调度器出现异常时,任何一个单机都可以升级为任务调度器。在确定任务调度器之后,可以将分布式系统中所有的单机节点都注册到任务调度器上,以方便调度。
[0057] 其次,将一个或多个待执行任务分别或批量封装为多线程任务。以JAVA编程为例,实现多线程的方式有多种,例如包括:继承Thread类,重写run方法的线程实现方法;通过实现Runnable接口,实现run方法,接口的实现类的实例作为Thread的target作为参数传入带参的Thread构造函数,通过调用start()方法启动线程的方法;通过Callable和FutureTask创建线程的方法;通过线程池创建线程的方法等。
[0058] 步骤102,所述任务调度器将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务;所述执行机为所述多个单机中的其中一个单机。
[0059] 在本发明实施例中,任务调度器从分布式系统的多个单机中确定一个执行机,获取该执行机的IP(Internet Protocol,网络互连协议)地址,并通过RPC(Remote Procedure Call,远程过程调用协议)调用该执行机,同时分配多线程任务给执行机,以使执行机处理该多线程任务。
[0060] 综上所述,本发明实施例提供的任务处理方法,通过任务调度器将待执行任务封装为多线程任务,任务调度器将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务,所述执行机为所述多个单机中的其中一个单机,可以使多个单机组成的分布式系统中的一个单机接收多线程任务,从而增加了单机提供服务的时间,达到了高可用的效果;并且因为多个单机均可同时执行多线程任务,相比于一个单机执行任务提高了同一时间可以启动的线程数量,从而可以达到压测的效果;此外,因为任务调度器可将任务分配给多个单机执行,可以减少一个单机上集成的任务数,从而降低了单机负载。
[0061] 图2为本发明实施例中提供的任务处理方法的流程图之二。所述方法应用于任务调度器,所述方法具体包括以下步骤。
[0062] 步骤201,所述任务调度器将待执行任务写入到多线程任务接口中,所述多线程任务接口包括Runnable接口、Callable接口中的一种。
[0063] 在本发明实施例中,任务调度器通过将待执行任务写入到Runnable接口或Callable接口的方式将待执行任务封装为多线程任务。具体地,将待执行任务写入到Runnable接口的方式,具体过程可以是:实现Runnable接口,实现run方法,接口的实现类的实例作为Thread的target作为参数传入带参的Thread构造函数,通过调用start()方法启动线程;将待执行任务写入到Callable接口的方式,具体过程可以是:首先,创建Callable接口的实现类,并实现Call方法其次,创建Callable实现类的实现,使用FutureTask类
包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值;再次,使用FutureTask对象作为Thread对象的target创建并启动线程;最终,调用FutureTask对象的get()来获取子线程执行结束的返回值。
[0064] 步骤202,所述任务调度器通过反射的方法从根据所述多线程任务创建的对象中获取参数信息。
[0065] 在本发明实施例中,首先根据多线程任务创建对象,然后从对象中反射获取参数信息,例如,类名、方法、返回类型等信息。正常情况下我们运行一个对象是通过类名创建对象然后调用相应的方法,那么,反射获取是通过已经创建好的对象反过来获取对象的类名、方法及返回类型。采用反射获取的原因是:分布式系统需要远程调用执行机,没法直接通过正常创建对象的方法来运行方法,所以只能通过反射方式来告诉执行机要运行哪个类的哪个方法。
[0066] 步骤203,所述任务调度器通过远程过程调用协议将包括所述参数信息的多线程任务分配给预先确定的执行机,以使所述执行机根据所述参数信息反射执行所述多线程任务。
[0067] 在本发明实施例中,实现分布式调用的
基础是RPC远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。具体他,任务调度器可以利用RPC封装submit接口来进行任务的提交,即向执行机分配任务,任务类型主要有Runnable、Callable两种类型,即使用submit(Runnable)、submit(Callable)中的任一种方式,通过RPC的方式将待执行任务传递到远程节点。
[0068] 上述任务的提交方法使用上跟java.util.concurrent.Executor一样,效果上dconcurrent是分布式执行,java.util.concurrent是本地多线程执行。这个过程对于用户是透明的,所以用户就跟通常编写多线程的方式一样,这种通过多线程方式编写分布式程序的方法使用户降低了编程难度,降低了人
力成本。
[0069] 任务调度器通过Runnable提交任务的方式的代码示例如下:
[0070]
[0071] 任务调度器通过Callable提交任务的方式可以如下所示:
[0072]
[0073] 在上述示例代码中,Runnable、Callable是多线程任务的接口,dExecutor是任务调度接口。
[0074] 位于远程的执行机在接收到任务调度器分配的任务后,通过反射的方式执行对应的类和约定好的方法,然后返回相应数据类型的任务处理结果。
[0075] 可选地,所述执行机通过以下方法预先确定:
[0076] 所述任务调度器将所述多个单机中执行任务次数最少的一个单机确定为执行机;或,所述任务调度器通过预先定义的调度算法从所述多个单机中确定执行机。
[0077] 在本发明实施例中,任务调度器可以通过多种方法从分布式系统的多个单机中确定执行机,具体包括:随机调度,即从多个单机中随机确定执行机,任务会随机分发到任意一个单机上执行;公平调度,即将多个单机中执行任务次数最少的一个单机确定为执行机,任务会被分配到执行任务次数最少的单机上执行,这有利于实现分布式系统中多个单机的负载均衡;固定调度,即将多个单机中预先
指定的一个单机确定为执行机,任务会被分配到固定单机执行,如果有新单机加入会重新安排;自定义调度,即通过预先定义的调度算法从多个单机中确定执行机。
[0078] 可选地,所述多线程任务包括紧急度参数和重要度参数,所述任务调度器通过预先定义的调度算法从所述多个单机中确定执行机,包括以下步骤A1-步骤A2:
[0079] 步骤A1,在所述任务的紧急度参数大于或等于紧急度阈值的情况下,所述任务调度器将所述多个单机中网络延迟小于第一阈值的单机确定为执行机。
[0080] 在本发明实施例中,多线程任务的数据包中可以包括紧急度参数和重要度参数的字段,该字段可以用参数表示相应的等级,即紧急度参数表示任务的紧急程度,重要度参数表示任务的重要程度。
[0081] 例如,紧急度参数和重要度参数可以分别从数字1-10中取值,且从1到10紧急程度或重要程度依次提高。进一步的,可以分别设置紧急度阈值和重要度阈值,例如可以均为8。在相应的参数取值大于或等于阈值的情况下,说明任务的紧急程度和/或重要程度较高,此时,任务调度器可以启用预先定义的调度算法选取合适的单机执行任务。
[0082] 任务调度器可以预先并定期通过PING的方式,记录发送PING命令请求各个单机的时间点,以及各个单机的响应时间点,用响应时间点减去请求时间点,得到各个单机处理请求的网络延迟时间。此外,任务调度器还预先确定网络延迟时间的第一阈值。网络延迟时间若小于第一阈值,说明网络延迟较小。
[0083] 在任务的紧急度参数大于或等于紧急度阈值的情况下,任务调度器将网络延迟小于第一阈值的单机确定为执行机。这样,对于紧急程度较高的任务,可以调用网络速度较快的单机去执行,提高了任务的执行速度。尤其在网络不稳定的情况下可以明显提高任务执行效率。
[0084] 步骤A2,在所述任务的重要度参数大于或等于重要度阈值的情况下,所述任务调度器将所述多个单机中执行任务成功率大于或等于第二阈值的单机确定为执行机。
[0085] 在本发明实施例中,任务调度器可以预先并定期记录各个单机执行任务的成功率。在接收到多线程任务后,若任务的重要度参数大于或等于重要度阈值,例如任务的重要度参数为9,大于重要度阈值8,则任务调度器从多个单机中挑选执行任务成功率大于或等于第二阈值的单机去执行任务。这样,对于重要程度较高的任务,可以调用历史上执行任务成功率较高的单机去执行,以保证重要任务执行成功的概率,避免重要的任务执行失败造成重大损失。
[0086] 此外,在所述任务的紧急度参数大于紧急度阈值、且重要度参数大于重要度阈值的情况下,所述任务调度器将所述多个单机中网络延迟小于第一阈值、且执行任务成功率大于或等于第二阈值的单机确定为执行机。
[0087] 若网络延迟小于第一阈值、且执行任务成功率大于或等于第二阈值的单机不存在,则任务调度器比较所述任务的紧急度参数和重要度参数的大小,并以较大的参数作为标准去选择执行机。例如,若所述任务的紧急度参数大于紧急度阈值、且重要度参数大于重要度阈值,且所述任务的紧急度参数大于所述重要度参数,则任务调度器将所述多个单机中网络延迟小于第一阈值的单机确定为执行机;若所述任务的紧急度参数大于紧急度阈值、且重要度参数大于重要度阈值,且所述任务的重要度参数大于所述紧急度参数,则任务调度器将所述多个单机中执行任务成功率大于或等于第二阈值的单机确定为执行机。此外,若所述任务的重要度参数等于所述紧急度参数,则从网络延迟小于第一阈值的单机中或执行任务成功率大于或等于第二阈值的单机中随机确定执行机。
[0088] 若所述任务的紧急度参数小于紧急度阈值且所述任务的重要度参数也小于重要度阈值,则可以不采用预先定义的调度算法,而是采用普通的调度策略确定执行机,例如任务调度器可以将多个单机中执行任务次数最少的一个单机确定为执行机。
[0089] 步骤204,若确定所述执行机执行任务异常,则所述任务调度器将所述执行机异常时正在执行的任务分配给其他单机。
[0090] 在本发明实施例中,分布式系统的所有单机均注册在任务调度器上,任务调度器可以随时获知每个单机的工作情况。若任务调度器发现执行机执行任务异常,为了确保任务正常执行,任务调度器会将执行机异常时正在执行的任务分配给其他单机。
[0091] 例如,待执行任务是采用拨测的方式,即定时测试的方式检查程序问题。若采用单机执行任务,那么在单机发生异常的情况下,待执行任务将执行失败,从而得到错误的程序检测结果。若采用本发明实施例中的分布式系统,在执行机发生异常的情况下,任务调度器会安排其他单机执行待执行任务,这样就保证了任务的正常执行。
[0092] 可选地,所述任务调度器是从服务器创建的有序列表中确定的,所述有序列表是通过对所述多个单机按照预设特征排序得到的。
[0093] 在本发明实施例中,分布式系统中还包括服务器,该服务器注册有ZooKeeper(分布式管理者)服务。ZooKeeper是一个分布式的,开放源码的
分布式应用程序协调服务,是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。服务器利用ZooKeeper服务可以从多个单机中确定任务调度器。具体方法可以是:首先,将多个单机按照预设特征排序,并将多个单机组成有序列表,例如按照单机配置从优到劣排序、按照单机所在的网络环境从优到劣排序,并将单机组成有序列表。其次,将有序列表中预设序号的单机确定为任务调度器,例如,将排序第一的单机确定为任务调度器。上述任务调度器确定执行机的方式为自定义调度方式。
[0094] 若确定当前的任务调度器出现异常,则服务器从所述有序列表中删除所述任务调度器对应的节点,以更新所述有序列表;所述服务器将所述更新的有序列表中的第一个节点确定为新的任务调度器,以保证分布式系统可以正常进行任务调度。
[0095] 程序运行过程中只有任务调度器具备写权限,其它单机如果要获取数据的时候都是通过网络的方式到任务调度器中获取,因为只有任务调度器可以写所以就保证了数据的准确性。当然如果要实时同步到其它单机也可以通过任务调度器调用sync方法,这样可以保证任务调度器发生异常的时候其它单机依然可以获取到完整的数据。
[0096] 图3为本发明实施例中提供的任务处理方法的示意图。
[0097] 在图3中,S1所示的leader表示分布式系统中的任务调度器,其IP地址为127.0.0.4;S2、S3、S4所示的follower分别表示分布式系统中位于不同IP地址的多个单机。
因为分布式系统中的任意一个单机均可能被服务器确定为任务调度器,所以在任务调度器和多个单机中,均部署有S5所示的Dexecutors任务调度接口、S6所示的Runnable接口、S7所示的Dcallable接口。其中,Runnable接口可以写入无返回值的任务,Dcallable接口可以写入有返回值的任务。S8所示的grpc表示任务调度过程中使用的grpc系统,grpc系统是由google开发的一款语言中立、平台中立、开源的rpc远程过程调用系统。S9所示的Dconcurrent表示本发明实施例使用的分布式并行处理工具包。
[0098] 具体地,当S1所示的leader在接收到待执行任务后,将待执行任务写入到S6所示的Runnable接口或S7所示的Callable接口中,以创建多线程任务对象。然后,S1所示的leader通过反射的方法从所述多线程任务对象中获取参数信息,再通过S8所示的grpc系统和S5所示Dexecutors任务调度接口的将包括所述参数信息的多线程任务分配给预先确定的执行机,其中,所述执行机为S2所示的单机、S3所示的单机、S4所示的单机中的其中一个。其中,Runnable接口方法、Callable接口方法、Dexecutors任务调度接口方法由S9所示的Dconcurrent分布式并行处理工具包提供。
[0099] 综上所述,本发明实施例提供的任务调度方法,除具有图1中的任务调度方法的有益效果外,还基于远程过程调用协议来实现远程调用,使得任务调度器可以像调用本地对象一样直接调用另一个单机上服务端应用的方法;并且,还通过反射形式把对应的类名、方法传递到远程,这个过程对于用户是透明的,所以用户就跟通常编写多线程的方式一样,这种通过多线程方式编写分布式程序的方法使用户降低了编程难度,降低了人力成本。
[0100] 图4为本发明实施例中提供的任务调度器的结构框图之一。所述任务调度器包括:
[0101] 封装模块301,用于将待执行任务封装为多线程任务;所述任务调度器由服务器从多个单机中确定;
[0102] 第一分配模块302,用于将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务;所述执行机为所述多个单机中的其中一个单机。
[0103] 本发明实施例提供的任务调度器,通过将待执行任务封装为多线程任务,将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务,所述执行机为所述多个单机中的其中一个单机,可以使多个单机组成的分布式系统中的一个单机接收多线程任务,从而增加了单机提供服务的时间,达到了高可用的效果;并且因为多个单机均可执行任务,相比于一个单机执行任务提高了同一时间可以启动的线程数量,达到了压测的效果;此外,因为任务调度器可将任务分配给多个单机执行,可以减少一个单机上集成的任务数,从而降低了单机负载。
[0104] 在图4的基础上,图5为本发明实施例中提供的任务调度器的结构框图之二。其中,所述封装模块301包括:
[0105] 写入子模块3011,用于将待执行任务写入到多线程任务接口中,所述多线程任务接口包括Runnable接口、Callable接口中的一种。
[0106] 所述第一分配模块302包括:
[0107] 获取子模块3021,用于通过反射的方法从根据所述多线程任务创建的对象中获取参数信息;
[0108] 第一分配子模块3022,用于通过远程过程调用协议将包括所述参数信息的多线程任务分配给预先确定的执行机,以使所述执行机根据所述参数信息反射执行所述多线程任务。
[0109] 可选地,所述执行机通过任务调度器的以下模块预先确定:
[0110] 第一确定模块,用于将所述多个单机中执行任务次数最少的一个单机确定为执行机;
[0111] 或,
[0112] 第二确定模块,用于通过预先定义的调度算法从所述多个单机中确定执行机。
[0113] 可选地,所述多线程任务包括紧急度参数和重要度参数,所述第二确定模块,包括:
[0114] 第一确定子模块,用于在所述任务的紧急度参数大于或等于紧急度阈值的情况下,将所述多个单机中网络延迟小于第一阈值的单机确定为执行机;
[0115] 第二确定子模块,用于在所述任务的重要度参数大于或等于重要度阈值的情况下,将所述多个单机中执行任务成功率大于或等于第二阈值的单机确定为执行机。
[0116] 所述任务调度器300还包括:
[0117] 第二分配模块303,用于若确定所述执行机执行任务异常,则将所述执行机异常时正在执行的任务分配给其他单机。
[0118] 可选地,所述任务调度器是从服务器创建的有序列表中确定的,所述有序列表是通过对所述多个单机按照预设特征排序得到的。
[0119] 综上所述,本发明实施例提供的任务调度器,除具有图1中的任务调度器的有益效果外,还基于远程过程调用协议来实现远程调用,使得任务调度器可以像调用本地对象一样直接调用另一个单机上服务端应用的方法;并且,还通过反射形式把对应的类名、方法传递到远程,这个过程对于用户是透明的,所以用户就跟通常编写多线程的方式一样,这种通过多线程方式编写分布式程序的方法使用户降低了编程难度,降低了人力成本。
[0120] 本发明实施例还提供了一种电子设备,如图6所示,包括处理器401、
通信接口402、
存储器403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信,
[0121] 存储器403,用于存放计算机程序;
[0122] 处理器401,用于执行存储器403上所存放的程序时,实现如下步骤:
[0123] 将待执行任务封装为多线程任务;
[0124] 将所述多线程任务分配给预先确定的执行机,以使所述执行机处理所述多线程任务;所述执行机为所述多个单机中的其中一个单机。
[0125] 上述终端提到的通信总线可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该通信总线可以分为
地址总线、
数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0126] 通信接口用于上述终端与其他设备之间的通信。
[0127] 存储器可以包括
随机存取存储器(Random Access Memory,简称RAM),也可以包括
非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0128] 上述的处理器可以是通用处理器,包括
中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字
信号处理器(Digital Signal Processing,简称DSP)、专用集成
电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程
门阵列(Field-Programmable Gate Array,简称FPGA)或者其他
可编程逻辑器件、分立门或者晶体管逻辑器件、分立
硬件组件。
[0129] 在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的任务处理方法。
[0130] 在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的任务处理方法。
[0131] 在上述实施例中,可以全部或部分地通过
软件、硬件、
固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、
计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个
网站站点、计算机、服务器或
数据中心通过有线(例如同轴
电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、
微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是
磁性介质,(例如,
软盘、
硬盘、磁带)、光介质(例如,DVD)、或者
半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0132] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0133] 本
说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0134] 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何
修改、等同替换、改进等,均包含在本发明的保护范围内。