发明内容
本申请的目的在于提出一种改进的用于调度任务的方法和装置,来解决以上背景技术部分提到的技术问题。
第一方面,本申请提供了一种用于调度任务的方法,所述方法包括:获取至少一个任务和与各所述任务对应的属性信息,其中,所述属性信息包括各所述任务的任务类别;将各所述任务的任务类别与预配置文件中存储的目标任务类别进行匹配,确定与各所述任务对应的中央处理器CPU核心标识,其中,所述预配置文件中存储有目标任务类别以及与所述目标任务类别对应的CPU核心标识;将各所述任务调度到与其对应的CPU核心标识所指示的CPU核心。
在一些实施例中,所述属性信息还包括各所述任务的输入参数和输出参数,以及在所述将各所述任务调度到与其对应的CPU核心标识所指示的CPU核心之后,所述方法还包括:对于每一个CPU核心,对于调度到该CPU核心的各个任务中的每一个任务,按照预设的任务执行先后顺序,确定该任务是否有前继任务,响应于该任务没有前继任务,将该任务添加到对应的任务队列,其中,所述前继任务为先于该任务执行并且输出参数与该任务的输入参数相关联的任务;从所述任务队列的队首开始依次调度每一个任务,响应于当前执行的任务发出了输入/输出请求,暂停执行该任务,将该任务移动到所述任务队列的队尾,并继续调度所述任务队列中的各任务。
在一些实施例中,所述从所述任务队列的队首开始依次调度每一个任务,响应于当前执行的任务发出了输入/输出请求,暂停执行该任务,将该任务移动到所述任务队列的队尾,并继续调度下一执行顺序的任务,包括:响应于当前执行的任务执行完成,将该任务从所述任务队列中移除,并确定该任务是否有后继任务,响应于该任务有后继任务,进一步确定该任务的后继任务对应的所有前继任务是否均已执行完成,若是,将该任务的后继任务添加到所述任务队列,并继续调度所述任务队列中的各任务,其中,所述后继任务为后于该任务执行并且输入参数与该任务的输出参数相关联的任务。
在一些实施例中,所述方法包括:对于在执行过程中发出输入/输出请求并且被暂停执行的每一个任务,当再次调度该任务时,响应于该任务发出的输入/输出请求有返回结果并且等待时间未超出对应的超时阈值,继续执行该任务。
在一些实施例中,所述方法包括:对于在执行过程中发出输入/输出请求并且被暂停执行的每一个任务,当再次调度该任务时,响应于该任务发出的输入/输出请求没有返回结果并且等待时间未超出对应的超时阈值,继续暂停执行该任务。
在一些实施例中,所述方法包括:对于所述任务队列中的每一个任务,当该任务在执行过程中发出输入/输出请求时,记录输入/输出请求的等待时间和输入/输出请求类型;对于每一类型输入/输出请求,根据记录的该类型输入/输出请求的等待时间,统计该类型输入/输出请求在单位时间内的平均等待时间,并将该类型输入/输出请求对应的超时阈值设置为所述平均等待时间,其中,所述平均等待时间为在单位时间内发出的各次该类型输入/输出请求的等待时间的总和与发出的该类型输入/输出请求的总次数的比值。
第二方面,本申请提供了一种用于调度任务的装置,所述装置包括:获取单元,配置用于获取至少一个任务和与各所述任务对应的属性信息,其中,所述属性信息包括各所述任务的任务类别;确定单元,配置用于将各所述任务的任务类别与预配置文件中存储的目标任务类别进行匹配,确定与各所述任务对应的中央处理器CPU核心标识,其中,所述预配置文件中存储有目标任务类别以及与所述目标任务类别对应的CPU核心标识;第一调度单元,配置用于将各所述任务调度到与其对应的CPU核心标识所指示的CPU核心。
在一些实施例中,所述属性信息还包括各所述任务的输入参数和输出参数,以及所述装置还包括:处理单元,配置用于对于每一个CPU核心,对于调度到该CPU核心的各个任务中的每一个任务,按照预设的任务执行先后顺序,确定该任务是否有前继任务,响应于该任务没有前继任务,将该任务添加到对应的任务队列,其中,所述前继任务为先于该任务执行并且输出参数与该任务的输入参数相关联的任务;第二调度单元,配置用于从所述任务队列的队首开始依次调度每一个任务,响应于当前执行的任务发出了输入/输出请求,暂停执行该任务,将该任务移动到所述任务队列的队尾,并继续调度所述任务队列中的各任务。
在一些实施例中,所述第二调度单元包括:后继任务处理子单元,配置用于响应于当前执行的任务执行完成,将该任务从所述任务队列中移除,并确定该任务是否有后继任务,响应于该任务有后继任务,进一步确定该任务的后继任务对应的所有前继任务是否均已执行完成,若是,将该任务的后继任务添加到所述任务队列,并继续调度所述任务队列中的各任务,其中,所述后继任务为后于该任务执行并且输入参数与该任务的输出参数相关联的任务。
在一些实施例中,所述装置进一步配置用于:对于在执行过程中发出输入/输出请求并且被暂停执行的每一个任务,当再次调度该任务时,响应于该任务发出的输入/输出请求有返回结果并且等待时间未超出对应的超时阈值,继续执行该任务。
在一些实施例中,所述装置进一步配置用于:对于在执行过程中发出输入/输出请求并且被暂停执行的每一个任务,当再次调度该任务时,响应于该任务发出的输入/输出请求没有返回结果并且等待时间未超出对应的超时阈值,继续暂停执行该任务。
在一些实施例中,所述装置进一步配置用于:对于所述任务队列中的每一个任务,当该任务在执行过程中发出输入/输出请求时,记录输入/输出请求的等待时间和输入/输出请求类型;对于每一类型输入/输出请求,根据记录的该类型输入/输出请求的等待时间,统计该类型输入/输出请求在单位时间内的平均等待时间,并将该类型输入/输出请求对应的超时阈值设置为所述平均等待时间,其中,所述平均等待时间为在单位时间内发出的各次该类型输入/输出请求的等待时间的总和与发出的该类型输入/输出请求的总次数的比值。
本申请提供的用于调度任务的方法和装置,通过获取至少一个任务和与各任务对应的属性信息,而后将各任务对应的任务类别与预配置文件中存储的目标任务类别进行匹配,以确定与各任务对应的中央处理器CPU核心标识,最后将各任务调度到与其对应的CPU核心标识所指示的CPU核心以执行各任务,从而有效利用了预配置文件,将各任务分配到指定的CPU核心,提高了CPU利用率和任务执行效率。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于调度任务的方法或用于调度任务的装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以向服务器105发送页面显示请求或从服务器105接收对于上述页面显示请求的处理结果等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103发出的界面显示请求提供支持的后台服务器。后台服务器可以对接收到的界面显示请求进行解析,以获取界面显示请求包含的任务以及各任务对应的属性信息,并且可以制定调度策略来调度各个任务。
需要说明的是,本申请实施例所提供的用于调度任务的方法一般由服务器105执行,相应地,用于调度任务的装置一般设置于服务器105中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请的用于调度任务的方法的一个实施例的流程200。所述的用于调度任务的方法,包括以下步骤:
步骤201,获取至少一个任务和与所获取的各任务对应的属性信息。
在本实施例中,用户可以通过有线连接方式或者无线连接方式从终端设备(例如图1所示的终端设备101、102、103)向用于调度任务的方法运行于其上的电子设备(例如图1所示的服务器105)发送页面显示请求。上述电子设备接收到页面显示请求后,可以对页面显示请求进行解析,以获取页面显示请求包含的各任务以及与各任务对应的属性信息。其中,上述属性信息包括但不限于各任务的任务类别。上述任务类别可以为各任务所在进程的进程标识,也可以为各任务所在线程的线程标识。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UWB(ultrawideband)连接、以及其他现在已知或将来开发的无线连接方式。
在本实施例的一些可选的实现方式中,上述电子设备所获取的各任务的所在进程例如可以是PHP工作进程,上述电子设备所获取的各任务的所在线程例如可以是HHVM工作线程或Zend工作线程。
步骤202,将所获取的各任务的任务类别与预配置文件中存储的目标任务类别进行匹配,确定与所获取的各任务对应的中央处理器CPU核心标识。
在本实施例中,上述电子设备可以将步骤201所获取的各任务的任务类别与预配置文件中存储的目标任务类别进行匹配,将与所获取的各任务的任务类别相同的目标任务类别对应的CPU核心标识作为所获取的各任务对应的CPU核心标识。其中,上述预配置文件可以是上述电子设备的管理人员预先创建的配置文件,上述预配置文件可以存储在上述电子设备本地,也可以存储在与上述电子设备远程连接的服务器,并且上述预配置文件中可以存储有目标任务类别以及与目标任务类别对应的CPU核心标识。可选地,上述目标任务类别可以为上述电子设备调度的所有任务对应的任务类别。
作为示例,如果上述电子设备的管理人员预先为上述电子设备调度的所有任务所在的进程指定CPU核心,则预配置文件中存储的目标任务类别可以为各进程的进程标识,比如进程标识可以为“process1”“process2”,那么与目标任务类别“process1”对应的CPU核心标识可以为“CPU0”,与目标任务类别“process2”对应的CPU核心标识可以为“CPU1”;如果步骤201所获取的各任务的任务类别都是“process1”,则上述电子设备在预配置文件中可以匹配出与所获取的各任务的任务类别相同的目标任务类别“process1”,并且可以确定与所获取的各任务对应的CPU核心标识为“CPU0”。
步骤203,将所获取的各任务调度到与其对应的CPU核心标识所指示的CPU核心。
在本实施例中,在确定所获取的各任务对应的CPU核心标识之后,上述电子设备可以将所获取的各任务调度到与所获取的各任务对应的CPU核心标识所指示的CPU核心,以执行所获取的各任务。
本申请的上述实施例提供的方法通过将所获取的各任务调度到指定的CPU核心,避免了在任务执行过程中由于切换CPU核心而导致CPU性能下降,从而提高了CPU利用率和任务执行效率。
继续参考图3,其示出了用于调度任务的方法的又一个实施例的流程300。该用于调度任务的方法的流程300,包括以下步骤:
步骤301,获取至少一个任务和与所获取的各任务对应的属性信息。
在本实施例中,用户可以通过有线连接方式或者无线连接方式从终端设备(例如图1所示的终端设备101、102、103)向用于调度任务的方法运行于其上的电子设备(例如图1所示的服务器105)发送页面显示请求。上述电子设备接收到页面显示请求后,可以对页面显示请求进行解析,以获取页面显示请求包含的各任务以及与各任务对应的属性信息。其中,上述属性信息包括但不限于各任务的任务类别,任务类别可以为各任务所在进程的进程标识,也可以为各任务所在线程的线程标识。
步骤302,将所获取的各任务的任务类别与预配置文件中存储的目标任务类别进行匹配,确定与所获取的各任务对应的CPU核心标识。
在本实施例中,上述电子设备可以将步骤301所获取的各任务的任务类别与预配置文件中存储的目标任务类别进行匹配,将与所获取的各任务的任务类别相同的目标任务类别对应的CPU核心标识作为所获取的各任务对应的CPU核心标识。其中,预配置文件可以是上述电子设备的管理人员预先创建的配置文件,预配置文件可以存储在上述电子设备本地,也可以存储在与上述电子设备远程连接的服务器,而且预配置文件中可以存储有目标任务类别以及与目标任务类别对应的CPU核心标识。可选地,上述目标任务类别可以为上述电子设备调度的所有任务对应的任务类别。
步骤303,将所获取的各任务调度到与其对应的CPU核心标识所指示的CPU核心。
在本实施例中,在确定所获取的各任务对应的CPU核心标识之后,上述电子设备可以将所获取的各任务调度到与所获取的各任务对应的CPU核心标识所指示的CPU核心,以执行所获取的各任务。
步骤304,对于每一个CPU核心,对于调度到该CPU核心的各个任务中的每一个任务,按照预设的任务执行先后顺序,确定该任务是否有前继任务,响应于该任务没有前继任务,将该任务添加到对应的任务队列。
在本实施例中,上述属性信息还可以包括所获取的各任务的输入参数和输出参数。对于每一个CPU核心,对于调度到该CPU核心的各任务中的每一个任务,上述电子设备可以按照预设的任务执行先后顺序,确定该任务是否有前继任务,其中,前继任务可以为先于该任务执行并且输出参数与该任务的输入参数相关联的任务。作为示例,如果没有先于该任务执行的任务,可以确定该任务没有前继任务;如果有一个先于该任务执行的任务“任务1”,并且“任务1”的输出参数是全局变量“a”,该任务的输入参数也是全局变量“a”,可以确定“任务1”是该任务的前继任务。
在本实施例中,上述电子设备可以将所确定的没有前继任务的各任务依次添加到对应的任务队列的队尾。之后,上述电子设备可以执行步骤305来调度上述任务队列中的各个任务。
需要说明的是,上述预设的任务执行先后顺序可以是人为预先设置的。
在本实施例的一些可选的实现方式中,对于调度到每一个CPU核心的各任务,上述电子设备可以将有前继任务的各任务与其前继任务的映射关系存储到与上述电子设备进行网络连接的数据库。其中,上述数据库可以为部署在上述电子设备本地的数据库,也可以为部署在与上述电子设备远程连接的服务器上的数据库。
步骤305,从上述任务队列的队首开始依次调度上述任务队列中的各任务。
在本实施例中,上述电子设备可以从上述任务队列的队首开始依次调度上述任务队列中的各任务,直至上述任务队列为空时终止任务调度的流程。如果当前执行的任务发出了输入/输出(I/O)请求,上述电子设备可以执行步骤306;如果当前执行的任务执行完成,上述电子设备可以执行步骤307。
在本实施例的一些可选的实现方式中,上述电子设备可以为上述任务队列中的各个任务创建对应的协程,上述电子设备可以通过调用上述协程来调度上述协程对应的任务。需要说明的是,协程(coroutine)是一种程序组件,通常协程更适合于用来实现彼此熟悉的应用组件,如合作式多任务,迭代器,无限列表和管道。一个应用可以包含多个协程,协程相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。
作为示例,上述电子设备可以通过create接口来为上述任务队列中的各个任务创建协程、申请协程栈空间、指定协程栈空间的大小以及将各协程当前的上下文初始化到对应的协程栈空间等,其中,create接口可以定义协程内的任务流程;之后,上述电子设备可以通过调用resume接口来调用所创建的各个协程以执行各个协程对应的任务,其中,通过调用resume接口可以恢复协程栈,执行协程。在调用所创建的各个协程时,上述电子设备可以利用ucontext函数组来实现协程上下文的保存、切换和恢复等操作,其中ucontext函数组可以包括getcontext函数、makecontext函数、setcontext函数和swapcontext函数。上述电子设备可以利用getcontext函数来初始化协程栈空间,将协程当前的上下文保存到对应的协程栈空间;可以利用makecontext函数来修改通过getcontext函数取得的上下文,给修改后的上下文指定一个协程栈空间;可以利用setcontext函数从当前协程的上下文跳转到其他协程的上下文;还可以利用swapcontext函数将协程当前的上下文保存到对应的协程栈空间,然后跳转到指定协程的上下文。
通常,协程的上下文指的是协程执行时的环境,可以包括协程对应的寄存器变量、内存信息、协程执行位置、以及协程所在引擎的虚拟机栈的属性等,其中,上述虚拟机栈的属性可以包括程序计数器(PC,program counter)变量、虚拟机栈的起始地址和终止地址、虚拟寄存器变量等。需要指出的是,协程所在的引擎可以是HHVM引擎,也可以是zend引擎。
需要说明的是,协程技术是目前广泛研究和应用的公知技术,在此不再赘述。
在本实施例的一些可选的实现方式中,如果当前调度的任务是在执行过程中发出输入/输出请求并且被暂停执行的任务,响应于该任务发出的输入/输出请求有返回结果并且等待时间未超出对应的超时阈值,上述电子设备可以将与该任务对应的协程当前的上下文恢复到上一次所保存的上下文,以继续执行该任务;响应于该任务发出的输入/输出请求没有返回结果并且等待时间未超出对应的超时阈值,上述电子设备可以调用yield接口以继续暂停执行该任务;响应于该任务发出的输入/输出请求没有返回结果并且等待时间超出了对应的超时阈值,上述电子设备可以进一步确定是否继续执行该任务。作为示例,如果该任务的后续流程的执行依赖于对应的输入/输出请求的返回结果,上述电子设备可以终止执行该任务,将该任务的运行状态设置为退出状态,并将设置的运行状态保存到上述数据库;如果该任务的后续流程的执行不依赖于对应的输入/输出请求的返回结果,上述电子设备可以将与该任务对应的协程当前的上下文恢复至上一次所保存的上下文,以继续执行该任务。
需要说明的是,上述超时阈值可以是人为设置的。上述电子设备也可以根据各任务的执行情况来自动地调整上述超时阈值。对于上述任务队列中的每一个任务,当该任务在执行过程中发出输入/输出请求时,上述电子设备可以记录输入/输出请求的等待时间和输入/输出请求类型,其中,输入/输出请求的类型可以为读请求,也可以为写请求。对于每一类型输入/输出请求,根据记录的该类型输入/输出请求的等待时间,统计该类型输入/输出请求在单位时间内的平均等待时间,并将该类型输入/输出请求对应的超时阈值设置为上述平均等待时间,其中,上述平均等待时间为在单位时间内发出的各次该类型输入/输出请求的等待时间的总和与发出的该类型输入/输出请求的总次数的比值。
步骤306,暂停执行当前执行的任务,将该任务移动到上述任务队列的队尾。
在本实施例中,响应于当前执行的任务发出了输入/输出请求,上述电子设备可以通过调用yield接口暂停执行该任务,并且上述电子设备可以将该任务移动到上述任务队列的队尾,之后上述电子设备可以执行步骤305以继续调度上述任务队列中的各任务。需要说明的是,在任务执行过程中发出的输入/输出请求是非阻塞式的输入/输出请求,发出输入/输出请求的任务在暂停执行时可以继续等待所请求的输入/输出操作,并且上述电子设备可以继续调度上述任务队列中的其他待调度的任务。
可选地,上述电子设备可以将暂停执行的任务的运行状态设置为暂停状态,并将设置的运行状态保存到上述数据库。
需要说明的是,通过调用yield接口,可以退出当前执行的任务对应的协程,记录该协程当前的上下文,将CPU出让给其他的协程。
步骤307,将当前执行完成的任务从上述任务队列中移除,确定该任务是否有后继任务。
在本实施例中,上述电子设备可以将当前执行完成的任务从上述任务队列中移除,并且上述电子设备还可以确定该任务是否有后继任务。其中,该任务的后继任务可以为后于该任务执行并且输入参数与该任务的输出参数相关联的任务。例如,在当前执行完成的任务之后执行的任务“任务3”的输入参数为全局变量“a”,当前执行完成的任务的输出参数也为全局变量“a”,则“任务3”为当前执行完成的任务的后继任务。如果当前执行完成的任务没有后继任务,上述电子设备可以执行步骤310;如果当前执行完成的任务有后继任务,上述电子设备可以执行步骤308。
可选地,上述电子设备可以将有后继任务的各任务与其后继任务的映射关系存储到上述数据库。上述电子设备可以将执行完成的任务的运行状态设置为退出状态,并将设置的运行状态保存到上述数据库。
步骤308,确定当前执行完成的任务的后继任务对应的所有前继任务是否均已执行完成。
在本实施例中,响应于当前执行完成的任务有后继任务,上述电子设备可以通过从上述数据库中获取当前执行完成的任务的后继任务对应的所有前继任务的运行状态,以确定当前执行完成的任务的后继任务对应的所有前继任务是否均已执行完成。如果当前执行完成的任务的后继任务对应的所有前继任务均未执行完成,上述电子设备可以执行步骤310;如果当前执行完成的任务的后继任务对应的所有前继任务均已执行完成,上述电子设备可以执行步骤309。
作为示例,当前执行完成的任务为“任务4”,“任务4”的后继任务为“任务5”和“任务6”,如果上述电子设备确定“任务5”和“任务6”分别对应的所有前继任务未执行完成,上述电子设备可以执行步骤310;如果上述电子设备确定“任务5”和“任务6”分别对应的所有前继任务均已执行完成,上述电子设备可以执行步骤309以将“任务5”和“任务6”添加到上述任务队列;如果上述电子设备确定“任务5”对应的所有前继任务均已执行完成,“任务6”对应的所有前继任务未执行完成,上述电子设备可以执行步骤309以将“任务5”添加到上述任务队列。
步骤309,对于当前执行完成的任务的各后继任务,将对应的所有前继任务均已执行完成的后继任务添加到上述任务队列。
在本实施例中,上述电子设备可以将步骤308所确定的对应的所有前继任务均已执行完成的后继任务添加到上述任务队列。之后,上述电子设备可以执行步骤305。
在本实施例的一些可选的实现方式中,如果当前执行完成的任务的后继任务对应的所有前继任务均已执行完成,上述电子设备可以将当前执行完成的任务的后继任务添加到上述任务队列的队首或队尾。作为示例,当前执行完成的任务的后继任务为“任务5”和“任务6”,“任务5”的执行顺序先于“任务6”,上述电子设备可以先将“任务6”添加到上述任务队列的队首,之后再将“任务5”添加到上述任务队列的队首;或者上述电子设备可以先将“任务5”添加到上述任务队列的队尾,之后再将“任务6”添加到上述任务队列的队尾。
可选地,如果当前执行完成的任务的后继任务的预设的任务执行先后顺序先于上述任务队列中的某个任务的执行顺序,上述电子设备可以将当前执行完成的任务的后继任务按照预设的任务执行先后顺序插入到上述任务队列中对应的位置。
步骤310,确定上述任务队列是否为空。
在本实施例中,上述电子设备可以通过获取上述任务队列中的任务的数目来确定上述任务队列是否为空。如果上述任务队列不为空,上述电子设备可以执行步骤305;如果上述任务队列为空,上述电子设备可以结束任务调度流程,并且可以将各任务的执行结果经处理后返回给对应的终端设备。
从图3中可以看出,与图2对应的实施例相比,本实施例中的用于调度任务的方法的流程300突出了对调度到每一个CPU核心的各任务的调度步骤。由此,本实施例描述的方案可以在Zend和HHVM两套引擎实现统一协程操作原语,并且可以实现PHP核心虚拟栈的切换;可以解决在PHP的两套引擎(Zend和HHVM引擎)下的协程技术统一实现;对于无前后依赖关系的任务(即添加到上述任务队列的各任务)可以并发执行。并且进一步地提高了CPU利用率和任务执行效率。
进一步参考图4,作为对上述各图所示方法的实现,本申请提供了一种用于调度任务的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图4所示,本实施例所述的用于调度任务的装置400包括:获取单元401、确定单元402和第一调度单元403。其中,获取单元401配置用于获取至少一个任务和与各上述任务对应的属性信息,其中,上述属性信息可以包括各上述任务的任务类别;确定单元402配置用于将各上述任务的任务类别与预配置文件中存储的目标任务类别进行匹配,确定与各上述任务对应的中央处理器CPU核心标识,其中,上述预配置文件中存储有目标任务类别以及与上述目标任务类别对应的CPU核心标识;而第一调度单元403配置用于将各上述任务调度到与其对应的CPU核心标识所指示的CPU核心。
在本实施例中,用于调度任务的装置400中:获取单元401、确定单元402和第一调度单元403的具体处理及其带来的有益效果可参看图2对应实施例中的步骤201、步骤202和步骤203的实现方式的相关描述,在此不再赘述。
在本实施例的一些可选的实现方式中,上述属性信息还可以包括各上述任务的输入参数和输出参数,以及上述装置还可以包括:处理单元(图中未示出),配置用于对于每一个CPU核心,对于调度到该CPU核心的各个任务中的每一个任务,按照预设的任务执行先后顺序,确定该任务是否有前继任务,响应于该任务没有前继任务,将该任务添加到对应的任务队列,其中,上述前继任务为先于该任务执行并且输出参数与该任务的输入参数相关联的任务;第二调度单元(图中未示出),配置用于从上述任务队列的队首开始依次调度每一个任务,响应于当前执行的任务发出了输入/输出请求,暂停执行该任务,将该任务移动到上述任务队列的队尾,并继续调度上述任务队列中的各任务。
在本实施例的一些可选的实现方式中,上述第二调度单元可以包括:后继任务处理子单元(图中未示出),配置用于响应于当前执行的任务执行完成,将该任务从上述任务队列中移除,并确定该任务是否有后继任务,响应于该任务有后继任务,进一步确定该任务的后继任务对应的所有前继任务是否均已执行完成,若是,将该任务的后继任务添加到上述任务队列,并继续调度上述任务队列中的各任务,其中,上述后继任务为后于该任务执行并且输入参数与该任务的输出参数相关联的任务。
在本实施例的一些可选的实现方式中,上述装置可以进一步配置用于:对于在执行过程中发出输入/输出请求并且被暂停执行的每一个任务,当再次调度该任务时,响应于该任务发出的输入/输出请求有返回结果并且等待时间未超出对应的超时阈值,继续执行该任务。
在本实施例的一些可选的实现方式中,上述装置可以进一步配置用于:对于在执行过程中发出输入/输出请求并且被暂停执行的每一个任务,当再次调度该任务时,响应于该任务发出的输入/输出请求没有返回结果并且等待时间未超出对应的超时阈值,继续暂停执行该任务。
在本实施例的一些可选的实现方式中,上述装置还可以进一步配置用于:对于上述任务队列中的每一个任务,当该任务在执行过程中发出输入/输出请求时,记录输入/输出请求的等待时间和输入/输出请求类型;对于每一类型输入/输出请求,根据记录的该类型输入/输出请求的等待时间,统计该类型输入/输出请求在单位时间内的平均等待时间,并将该类型输入/输出请求对应的超时阈值设置为上述平均等待时间,其中,上述平均等待时间为在单位时间内发出的各次该类型输入/输出请求的等待时间的总和与发出的该类型输入/输出请求的总次数的比值。
下面参考图5,其示出了适于用来实现本申请实施例的服务器的计算机系统500的结构示意图。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本申请的方法中限定的上述功能。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括获取单元、确定单元和第一调度单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,接收单元还可以被描述为“获取至少一个任务和与各所述任务对应的属性信息的单元”。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:获取至少一个任务和与各所述任务对应的属性信息,其中,所述属性信息包括各所述任务的任务类别;将各所述任务的任务类别与预配置文件中存储的目标任务类别进行匹配,确定与各所述任务对应的中央处理器CPU核心标识,其中,所述预配置文件中存储有目标任务类别以及与所述目标任务类别对应的CPU核心标识;将各所述任务调度到与其对应的CPU核心标识所指示的CPU核心。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。