发明内容
基于此,有必要针对上述技术问题,提供一种能够减少线程切换次数,提高任务消息的执行效率的定时任务处理方法、装置、计算机设备和存储介质。
第一方面,提供一种定时任务处理方法,该方法包括:
获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;
将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;
在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
本实施例中,通过将各第一类定时任务的定时分辨率均调整成目标定时分辨率,这样可以减少线程切换次数,即不会频繁地切换执行任务消息的线程,从而可以提高执行任务消息的线程的执行效率。
在其中一个实施例中,上述将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率,包括:
获取各上述第一类定时任务的定时分辨率中的最小定时分辨率;
根据上述最小定时分辨率确定上述目标定时分辨率。
本实施例中,通过选取各第一类定时任务的定时分辨率中的最小定时分辨率作为目标定时分辨率,这样可以涵盖所有第一类定时任务,避免个别第一类定时任务没有被执行的情况,达到各个第一类定时任务均会被执行的效果。
在其中一个实施例中,上述根据上述最小定时分辨率确定上述目标定时分辨率,包括:
对上述最小定时分辨率进行取整,得到上述目标定时分辨率。
本实施例中,对最小定时分辨率进行取整,可以便于计算机设备对最小定时分辨率进行处理,减少计算量,提高计算效率。
在其中一个实施例中,上述对上述最小定时分辨率进行取整,得到上述目标定时分辨率,包括:
采用预设的指数函数对上述最小定时分辨率进行向下取整,得到上述目标定时分辨率;上述预设的指数函数为2的幂指数函数。
本实施例中,采用2的幂指数函数对最小定时分辨率进行向下取整,这样减少计算数据格式的转换,进一步减少计算量,提高计算效率,同时可以保证各第一类定时任务均会执行够相应的执行次数。
在其中一个实施例中,在上述获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率之前,上述方法还包括:
获取各上述第一类定时任务的执行功耗;上述第一类定时任务的执行功耗表征线程执行上述第一类定时任务的执行时长;
根据各上述第一类定时任务的执行功耗,在预设的映射关系中确定各上述第一类定时任务对应的目标线程;上述映射关系中包括多个执行功耗范围和每个执行功耗范围对应的线程。
本实施例中,通过第一类定时任务的功耗选择与功耗匹配的线程,这样在线程执行各第一类定时任务时,就可以避免产生额外的功耗,即可以降低线程执行第一类定时任务的功耗。
在其中一个实施例中,上述目标线程包括系统服务器线程、系统定时器线程和定时器专有线程,上述定时器专有线程对应的执行功耗范围大于上述系统服务器线程对应的执行功耗范围,上述系统服务器线程对应的执行功耗范围大于上述系统定时器线程对应的执行功耗范围。
本实施例中,目标线程包括三类线程,这样可以细化各第一类定时任务对应的目标线程,达到快速匹配目标线程的目的。
在其中一个实施例中,上述方法还包括:
控制第一线程将获取的各第二类定时任务添加至不同的子定时器中;上述不同的子定时器对应不同的内存资源;
控制不同的第二线程在上述不同的子定时器中删除各上述第二类定时任务。
本实施例中,可以将不同的第二类定时任务添加至不同的子定时器中,这样在线程删除各第二类定时任务时,就可以降低在一个定时器中删除第二类定时任务的线程数量,即可以降低线程之间的频度,进而就可以降低线程之间的竞争。
在其中一个实施例中,上述控制第一线程将获取的各第二类定时任务添加至不同的子定时器中,包括:
对各上述第二类定时任务进行划分,确定划分的至少一个第二类定时任务群组;
控制第一线程将上述至少一个第二类定时任务群组添加至不同的子定时器中。
本实施例中,可以对各第二类定时任务进行群组划分,并将划分的第二类定时任务群组分别添加至各子定时器中,这样可以保证所有的第二类定时任务均可以添加至子定时器中,避免有的定时任务群组没有添加的子定时器的情况。
第二方面,提供一种定时任务处理装置,该装置包括:
获取模块,用于获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;
调整模块,用于将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;
执行模块,在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
第三方面,提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;
将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;
在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;
将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;
在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
上述定时任务处理方法、装置、计算机设备和存储介质,通过获取同一线程下的多个第一类定时任务以及各第一类定时任务的第一类定时任务分辨率,将各第一类定时任务的定时分辨率均调整成目标定时分辨率,并在满足定时分辨率的条件下,控制线程执行各第一类定时任务;其中,第一类定时任务的定时分辨率用于表征第一类定时任务对应的线程的唤醒周期,各第一类定时任务的定时分辨率不同。在该方法中,由于可以将各第一类定时任务不同的定时分辨率均调整成统一的目标定时分辨率,这样每个第一类定时任务的执行时刻就是相同的,那么在唤醒该同一线程时,就可以减少线程唤醒次数,也就是说可以减少执行任务消息的线程与该执行第一类定时任务的线程之间切换的次数,即不会频繁地切换执行任务消息的线程,从而就可以提高执行任务消息的线程的执行效率。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的定时任务处理方法,可以应用于计算机设备,该计算机设备可以是终端或服务器,以终端为例,其内部结构图可以如图1所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种定时任务处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
需要说明的是,本申请实施例的执行主体可以是主文件系统,也可以是定时任务处理装置,当然也可以是计算机设备,以下就以计算机设备为执行主体对本申请的技术方案进行说明。
目前,在主文件系统处理任务消息时,通常主文件系统会为每个任务消息对应设置一个第一类定时任务,这样在每个第一类定时任务的执行时刻到达时,执行第一类定时任务的线程将被唤醒,然后主文件系统控制执行第一类定时任务的线程执行第一类定时任务。然而在主文件系统实际处理任务消息的过程中,经常都会存在主文件系统在执行任务消息的线程与执行第一类定时任务的线程之间来回切换的情况,且线程切换比较频繁,影响任务消息的执行效率。以下就针对线程切换频繁,会影响任务消息的执行效率这个问题的技术方案进行说明。
在一个实施例中,提供了一种定时任务处理方法,本实施例涉及的是如何对定时任务的不同定时分辨率进行调整,以减少线程切换次数的具体过程。如图2所示,该方法可以包括以下步骤:
S202,获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同。
其中,主文件系统在处理任务消息时,会有很多个任务消息,相应地也会有很多个第一类定时任务,部分第一类定时任务会采用同一个线程执行,这里选取的就是通过同一个线程执行的多个第一类定时任务。
另外,这里各个第一类定时任务的定时分辨率可以均不相同,也可以是部分第一类定时任务的定时分辨率不同。这里每个第一类定时任务均为周期性的定时任务,一般计算机设备控制执行第一类定时任务的线程执行第一类定时任务时,会将执行任务消息的线程切换至执行第一类定时任务的线程上,即执行第一类定时任务的线程会被唤醒,然后控制执行第一类定时任务的线程执行第一类定时任务。那么这里对于每个周期性的第一类定时任务,该执行第一类定时任务的线程就会被周期性的唤醒,然后去执行对应的第一类定时任务。
具体的,计算机设备中的主文件系统在处理各个任务消息时,会为每个任务消息添加对应的第一类定时任务,同时会设置好各第一类定时任务的定时分辨率,以及各第一类定时任务分别采用哪个线程进行执行等信息。添加好各第一类定时任务之后,这里计算机设备就可以获取到设置的同一线程下的多个第一类定时任务,同时可以得到每个第一类定时任务的定时分辨率。另外,这里的第一类定时任务可以是活跃定时器中存在的第一类定时任务,可以采用CRON(计划任务)下的线程进行执行。
示例地,这里假设有三种周期性的第一类定时任务,分别记为T1、T2、T3,这三种第一类定时任务各自的定时分辨率分别为4ms、5ms、6ms,执行这三种第一类定时任务的线程记为A。假设从0ms开始,截止20ms,A线程的唤醒时刻分别为:4ms(T1)--5ms(T2)--6ms(T3)--8ms(T1)--10ms(T2)--12ms(T1、T3)--15ms(T2)--16ms(T1)--18ms(T3)--20ms(T1、T2),可见,在0ms到20ms内,线程A唤醒次数为10次,即从执行任务消息的线程上切换到A线程上,会切换10次。
S204,将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率。
在本步骤中,目标定时分辨率指的是将各个第一类定时任务的定时分辨率都调整成统一的一个定时分辨率。
在调整各第一类定时任务的定时分辨率时,可以是将各第一类定时任务的定时分辨率进行求和取平均(可以是直接求和取平均或加权求和取平均),并将得到的平均值作为目标定时分辨率;当然也可以是从各第一类定时任务的定时分辨率中选取一个中位值(或中值)作为目标定时分辨率;当然也可以是从各第一类定时任务的定时分辨率中选取一个最大定时分辨率作为目标定时分辨率;当然还可以是从各第一类定时任务的定时分辨率中选取一个最小定时分辨率作为目标定时分辨率;当然还可以是其他选取方式,总之,可以根据各第一类定时任务的定时分辨率,得到目标定时分辨率,并将各第一类定时任务的定时分辨率均调整成目标定时分辨率。
S206,在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
在本步骤中,这里满足目标定时分辨率的条件指的是在目标定时分辨率对应的定时时刻来临时,即上述的同一线程唤醒时刻来临时,由于上述各个第一类定时任务的定时分辨率均为同一个目标定时分辨率,即各个第一类定时任务的定时分辨率相同,那么在执行第一类定时任务的线程唤醒时,此时就可以控制上述的同一线程同时执行各个第一类定时任务。
示例地,继续以上述S202中的A线程、三个第一类定时任务为例,假设从T1、T2、T3三个第一类定时任务的定时分辨率中选取中值作为目标定时分辨率,即从4ms、5ms、6ms选取中值,为5ms,即选取5ms作为目标定时分辨率。那么从0ms到20ms内,A线程的唤醒时刻分别为:5ms(T1、T2、T3)--10ms(T1、T2、T3)--15ms(T1、T2、T3)--20ms(T1、T2、T3)。由此可见,在0ms到20ms内,A线程的唤醒次数为4次,即从执行任务消息的线程上切换到A线程上,会切换4次。
相比上述S202中的切换10次,这里的切换4次明显比上述的切换10次小,由此可知,通过本实施例的调整方法,可以减少执行第一类定时任务的线程的唤醒次数,即可以减少执行任务消息的线程切换到执行第一类定时任务的线程上的切换次数。那么在执行任务消息时,就不会频繁的清除执行任务消息的线程上的缓存,那么也就不会影响执行任务消息的线程的执行效率。相反地,由于线程切换次数的减少,反而会提高执行任务消息的线程的执行效率。
需要说明的是,通过相关实验表明,执行第一类定时任务的线程的切换次数,每进程能够控制在百次以内,大大缩减了执行第一类定时任务的线程的切换次数,提高了执行任务消息的线程的执行效率。
上述定时任务处理方法中,通过获取同一线程下的多个第一类定时任务以及各第一类定时任务的第一类定时任务分辨率,将各第一类定时任务的定时分辨率均调整成目标定时分辨率,并在满足定时分辨率的条件下,控制线程执行各第一类定时任务;其中,第一类定时任务的定时分辨率用于表征第一类定时任务对应的线程的唤醒周期,各第一类定时任务的定时分辨率不同。在该方法中,由于可以将各第一类定时任务不同的定时分辨率均调整成统一的目标定时分辨率,这样每个第一类定时任务的执行时刻就是相同的,那么在唤醒该同一线程时,就可以减少线程唤醒次数,也就是说可以减少执行任务消息的线程与该执行第一类定时任务的线程之间切换的次数,即不会频繁地切换执行任务消息的线程,从而就可以提高执行任务消息的线程的执行效率。
在另一个实施例中,提供了另一种定时任务处理方法,本实施例涉及的是如何调整各第一类定时任务的定时分辨率的具体过程。在上述实施例的基础上,如图3所示,上述S204可以包括以下步骤:
S302,获取各上述第一类定时任务的定时分辨率中的最小定时分辨率。
在本步骤中,在上述获取到各个第一类定时任务的定时分辨率之后,可以对各个第一类定时任务的定时分辨率进行排序,可以是从小到大排序,也可以是从大到小排序,得到排序结果。
比如按从小到大排序,得到从小到大的排序结果,那么可以从该从小到大的排序结果中选取第一个定时分辨率,该第一定时分辨率即为最小定时分辨率。
或者,比如按从大到小排序,得到从大到小的排序结果,那么可以从该从大到小的排序结果中选取最后一个定时分辨率,该最后一个定时分辨率即为最小定时分辨率。
当然也可以按照其他方式选取最小定时分辨率,总之可以选取到最小定时分辨率即可。
S304,根据上述最小定时分辨率确定上述目标定时分辨率。
具体的,在从各个第一类定时任务的定时分辨率中选取到最小定时分辨率之后,可以直接将该最小定时分辨率作为目标定时分辨率;当然还可以对该最小定时分辨率进行处理,并将处理后的值作为目标定时分辨率。总之,可以通过最小定时分辨率确定出目标定时分辨率。
本实施例的定时任务处理方法,通过获取各第一类定时任务的定时分辨率中的最小定时分辨率,并根据最小定时分辨率确定目标定时分辨率。在本实施例中,由于可以根据最小定时分辨率确定目标定时分辨率,这样选取的定时分辨率可以涵盖该同一线程上的所有第一类定时任务,避免个别第一类定时任务没有被执行的情况,达到各个第一类定时任务均会被执行的效果。
在另一个实施例中,提供了另一种定时任务处理方法,本实施例涉及的是如何根据最小定时分辨率确定目标定时分辨率的具体过程。在上述实施例的基础上,上述S304可以包括以下步骤B:
步骤B,对上述最小定时分辨率进行取整,得到上述目标定时分辨率。
在本步骤中,在上述获得最小定时分辨率之后,由于各第一类定时任务的定时分辨率不一定是整数,所以获得的最小定时分辨率也不一定是整数,那么为了后续便于计算,一般可以对最小定时分辨率进行取整。这里在取整时,可以是对最小定时分辨率进行向上取整,也可以对最小定时分辨率进行向下取整,当然还可以是四舍五入进行取整。
示例地,例如最小分辨率是2.3ms,对其进行向上取整得到的就是3ms,向下取整得到的就是2ms,四舍五入取整得到的就是2ms。
进一步地,为了在后续便于计算机设备对目标定时分辨率进行处理,可选的,可以采用预设的指数函数对上述最小定时分辨率进行向下取整,得到上述目标定时分辨率;上述预设的指数函数为2的幂指数函数。
这里采用2的幂指数函数,即2的幂次方对最小定时分辨率进行取整,是为了和计算机的计算原理无缝对接,即按照计算机的二进制计算原理进行取整。当然,向下取整可以在符合计算机计算原理的前提下,保证所有的第一类定时任务都能被执行够设定次数,即某一个第一类定时任务原本在0-20ms内是执行5次的,那么在调整定时分辨率之后,最少也会被执行5次。
本实施例中的定时任务处理方法,可以对最小定时分辨率进行取整,得到目标定时分辨率,这样可以便于计算机处理,减少计算量,提高计算效率。进一步地,可以2的幂指数函数对最小定时分辨率进行向下取整,这样可以减少计算数据格式的转换,进一步减少计算量,提高计算效率,同时还可以保证各第一类定时任务均会被执行够相应的执行次数。
上述介绍了通过减少线程切换次数,可以提高执行任务消息的线程的执行效率,但是在线程执行第一类定时任务过程中,还会带来主文件系统的功耗增加,以下就通过对第一类定时任务的功耗进行划分的实施例,来对如何降低主文件系统的功耗进行说明。
在另一个实施例中,提供了另一种定时任务处理方法,本实施例涉及的是如何根据各第一类定时任务的执行功耗确定对应的目标线程的具体过程。在上述实施例的基础上,如图4所示,上述方法还可以包括以下步骤:
S402,获取各上述第一类定时任务的执行功耗;上述第一类定时任务的执行功耗表征线程执行上述第一类定时任务的执行时长。
其中,第一类定时任务的执行功耗表示执行该第一类定时任务的线程在执行该第一类定时任务时的时间开销,或者称为时间长短(执行时长),一般执行时长越长,则表明该第一类定时任务的功耗越大。
具体的,在计算机设备的主文件系统在设置各个第一类定时任务时,通常也可以预计出执行各个第一类定时任务所需的执行时长,并将各个第一类定时任务的执行时长与对应的第一类定时任务均存放在定时器中,这样在需要各个第一类定时任务的执行时长时,就可以从预先存放的定时器中获得各个第一类定时任务的执行时长。
在获得各个第一类定时任务的执行时长后,由于第一类定时任务的执行功耗与执行时长是正比的,那么也就可以相应得到各个第一类定时任务的执行功耗。
S404,根据各上述第一类定时任务的执行功耗,在预设的映射关系中确定各上述第一类定时任务对应的目标线程;上述映射关系中包括多个执行功耗范围和每个执行功耗范围对应的线程。
在本步骤中,在通过第一类定时任务的执行功耗获得对应的目标线程之前,可以先获取多个执行功耗范围以及多个线程,并将这多个执行功耗范围和多个线程一一对应起来,建立执行功耗范围和线程之间的映射关系。
在建立好执行功耗范围和线程之间的映射关系之后,就可以将上述各个第一类定时任务的执行功耗分别和映射关系中的执行功耗范围进行匹配,得到每个第一类定时任务匹配的执行功耗范围,进而通过执行功耗范围就可以得到对应的线程,记为目标线程,即得到各个第一类定时任务对应的目标线程。之后,就可以获取同一目标线程下的多个第一类定时任务,调整分辨率,并在调整分辨率之后执行各第一类定时任务。
可选的,上述目标线程包括系统服务器线程、系统定时器线程和定时器专有线程,上述定时器专有线程对应的执行功耗范围大于上述系统服务器线程对应的执行功耗范围,上述系统服务器线程对应的执行功耗范围大于上述系统定时器线程对应的执行功耗范围。这里的系统定时器线程指的是CRON(计划任务)的timer线程,主要负责处理低功耗的第一类定时任务;系统服务器线程指的是CRON的server线程,主要负责处理中功耗的第一类定时任务;定时器专有线程指的是定时器自己专有的server线程,主要用来处理高功耗的第一类定时任务。这里的高功耗大于中功耗,中功耗大于低功耗。
另外,这里低功耗指的是执行开销小,大约可以在毫秒内完成的第一类定时任务;中功耗指的是处理时间较长,容易影响其他定时器的定时精度的第一类定时任务;高功耗指的是处理存在堵塞性操作,或与其他定时器处理相互依赖。
需要说明的是,上述建立映射关系时采用的多个线程,通常也就是系统服务器线程、系统定时器线程和定时器专有线程这三种线程,对应的执行功耗范围依次是定时器专有线程对应的执行功耗范围大于系统服务器线程对应的执行功耗范围,系统服务器线程对应的执行功耗范围大于系统定时器线程对应的执行功耗范围。另外,这里定时器专有线程对应的执行功耗范围与系统服务器线程对应的执行功耗范围可以有重叠部分,也可以无重叠部分,相应的,系统服务器线程对应的执行功耗范围和系统定时器线程对应的执行功耗范围可以有重叠部分,也可以无重叠部分。
进一步地,上述系统定时器线程(CRON的timer线程)和系统服务器线程(CRON的server线程)可以使用进程级的线程,这样在执行第一类定时任务时,可以避免过多独立的线程,从而可以减少第一类定时任务的线程的唤醒次数,即进一步减少执行任务消息的线程与执行第一类定时任务的线程之间的切换次数,减少线程切换开销。
本实施例的定时任务处理方法,通过获取各第一类定时任务的执行功耗,并根据各第一类定时任务的执行功耗,在预设的映射关系中确定各第一类定时任务对应的目标线程;由于可以根据第一类定时任务的执行功耗选择匹配的线程执行各第一类定时任务,这样选择到的线程就是与各第一类定时任务最为匹配的,那么在线程执行各第一类定时任务时,就可以避免产生额外的功耗,即可以降低线程执行第一类定时任务的功耗。进一步地,目标线程包括系统服务器线程、系统定时器线程和定时器专有线程,定时器专有线程对应的执行功耗范围大于系统服务器线程对应的执行功耗范围,系统服务器线程对应的执行功耗范围大于系统定时器线程对应的执行功耗范围;这样可以细化各第一类定时任务对应的目标线程,达到快速匹配目标线程的目的。
在上述的实施例中,介绍了通过减少线程切换次数,可以提高执行任务消息的线程的执行效率,以及可以通过第一类定时任务的执行功耗获得对应的目标线程的内容。然而,在实际使用分布式文件系统中的主文件系统处理任务消息时,一般主文件系统处理的任务消息非常多,通常会给每个任务消息设置一个第二类定时任务,并利用第二类定时任务识别处理任务消息时的超时异常情况,处理任务消息前,添加第二类定时任务,任务消息处理完成且没有超时,则删除第二类定时任务,若任务消息处理超时,则会触发第二类定时任务。然而在任务消息处理地非常频繁时,如果同时采用相同或不同线程在同一块内存资源里频繁添加或删除第二类定时任务,难免会发生线程之间的竞争,这样就会带来线程之间的竞争开销大。以下就对如何解决线程竞争开销这个问题的技术方案进行说明。
在另一个实施例中,提供了另一种定时任务处理方法,本实施例涉及的是如何对各定时任务进行添加以及删除的具体过程。在上述实施例的基础上,如图5所示,上述方法还可以包括以下步骤:
S502,控制第一线程将获取的各第二类定时任务添加至不同的子定时器中;上述不同的子定时器对应不同的内存资源。
其中,这里不同的子定时器对应不同的内存资源,这些不同的内存资源可以是一个定时器所对应的内存资源,即这里将一个定时器对应的内存资源划分成多块内存资源,分别分成不同的子定时器对应的内存资源。
具体的,计算机设备的主文件系统在向各子定时器中添加第二类定时任务时,可以预先获取各第二类定时任务,之后可以采用随机Random的方式,即将各第二类定时任务随机添加至不同的子定时器中,随机的方式可以是平均添加,也可以是不均等添加。
可选的,在具体添加时,可以对各上述第二类定时任务进行划分,确定划分的至少一个第二类定时任务群组;控制第一线程将上述至少一个第二类定时任务群组添加至不同的子定时器中。
这里划分第二类定时任务群组时,可以是均等划分,也可以是不均分划分。同时,划分的第二类定时任务群组的数量小于或等于子定时器的数量,这样可以保证所有的第二类定时任务群组均可以添加到子定时器中,避免有的第二类定时任务群组没有添加的子定时器的情况。
示例地,假设有5个子定时器,有6个第二类定时任务,那么在划分群组时,可以是均等划分,比如划分成2组,每组各3个第二类定时任务,并将这两组第二类定时任务群组随机添加至5个子定时器中的两个子定时器中;再比如可以将这6个第二类定时任务不均等划分,比如划分成5组,分别包括的第二类定时任务的数量为2、1、1、1、1,然后将这五组第二类定时任务群组随机分配至这5个子定时器中,比如第一个子定时器中添加2个第二类定时任务,第二-第五个子定时器中均添加一个第二类定时任务。
S504,控制不同的第二线程在上述不同的子定时器中删除各上述第二类定时任务。
在本步骤中,第二线程和上述的第一线程可以是不同的线程,上述第一线程可以用来向子定时器中添加第二类定时任务,第二线程可以从子定时器中删除第二类定时任务。这里第二线程的数量可以根据实际情况设定,可以大于或等于子定时器的数量,当然也可以小于子定时器的数量。
在这里需要说明的是,这里的定时任务处理装置有三种设置模式,分别为Random模式、PERCPU模式和Single模式。其中Random模式下,定时器包含多个子定时器,在添加第二类定时任务时,将随机选择子定时器进行第二类定时任务的添加,本实施例中采用的即是这种模式。另外,在PERCPU模式下,定时器包含的子定时器数量与计算机设备的CPU核的数量相等,在添加第二类定时任务时,将在设定CPU核下的子定时器中添加,同时删除时会在该设定CPU核下的子定时器中进行删除。在Single模式下,定时器一般只包含一个子定时器,这种情况比较适合第二类定时任务比较少的情况,可以节省系统功耗,但是对于第二类定时任务较多的场景不适用。
通常在Linux内核实现的定时器中,一般是采用PERCPU模式的定时器,其对于频繁添加第二类定时任务以及执行第二类定时任务的场景比较适用,线程之间的竞争比较小;但是对于频繁添加第二类定时任务以及删除第二类定时任务的场景下,尤其对于添加第二类定时任务以及删除第二类定时任务的线程不是同一个线程时,以及参见图5a所示的添加的线程比较单一,但是删除第二类定时任务的线程比较分散的场景下,线程之间的竞争会比较大(即4个线程均去同一个子定时器中删除第二类定时任务,那必然频度较高,线程之间的竞争较大)。
针对这个问题,本实施例给出了定时器划分的方案,参见图5b所示,有2个子定时器、4个第二类定时任务,在一个线程向子定时器中添加第二类定时任务时,可以是随机将任意两个第二类定时任务添加至其中一个子定时器中,在删除各第二类定时任务时,可以是不同的4个线程分别从这2个子定时器中删除添加的4个第二类定时任务。由此可见,在添加第二类定时任务时,由于可以将各第二类定时任务进行划分群组进行添加,这样在不同线程删除各第二类定时任务时,就不会出现多个线程同时在同一个定时器中删除多个第二类定时任务的情况,即可以降低各线程的竞争度,那么也就可以降低线程的竞争开销。
需要说明的是,通过相关实验表明,频繁“添加第二类定时任务+删除第二类定时任务”的竞争引起的CPU消耗降低为原先的20%。
本实施例的定时任务处理方法,可以控制第一线程将各第二类定时任务添加至不同的子定时器中,并控制不同的第二线程在不同的子定时器中删除各第二类定时任务;其中,不同的子定时器对应不同的内存资源。在本实施例中,由于可以将不同的第二类定时任务添加至不同的子定时器中,这样在线程删除各第二类定时任务时,就可以降低在一个定时器中删除第二类定时任务的线程数量,即可以降低线程之间的频度,进而就可以降低线程之间的竞争。进一步地,可以对各第二类定时任务进行群组划分,并将划分的第二类定时任务群组添加至不同的子定时器中,这样可以保证所有的第二类定时任务均可以添加至子定时器中,避免有的第二类定时任务群组没有添加的子定时器的情况。
接下来,为了便于本领域的技术人员对本申请的技术方案进行更好的理解,以下结合一个具体的实施例对本申请的技术方案进行详细说明,在上述实施例的基础上,该方法可以包括以下步骤S1-S10:
S1,获取各第一类定时任务的执行功耗;上述第一类定时任务的执行功耗表征线程执行上述第一类定时任务的执行时长。
S2,根据各第一类定时任务的执行功耗,在预设的映射关系中确定各第一类定时任务对应的目标线程;上述映射关系中包括多个执行功耗范围和每个执行功耗范围对应的线程。
S3,获取同一目标线程下的多个第一类定时任务以及各第一类定时任务的定时分辨率。
S4,获取各第一类定时任务的定时分辨率中的最小定时分辨率。
S5,采用2的幂指数函数对上述最小定时分辨率进行向下取整,得到目标定时分辨率。
S6,将目标定时分辨率确定为各第一类定时任务新的定时分辨率。
S7,在满足目标定时分辨率的条件下,控制线程执行各第一类定时任务。
S8,对获取的各第二类定时任务进行划分,确定划分的至少一个第二类定时任务群组。
S9,控制第一线程将至少一个第二类定时任务群组添加至不同的子定时器中。
S10,控制不同的第二线程在不同的子定时器中删除各第二类定时任务。
需要说明的是,上述S8-S10可以在S1-S7之前执行,也可以在S1-S7之后执行,当然,S8-S10也可以与S1-S7并列同步执行,当然也可以是其他执行顺序,这里不作具体限定。
应该理解的是,虽然图2-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-5中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种定时任务处理装置,包括:获取模块10、调整模块11和执行模块12,其中:
获取模块10,用于获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;
调整模块11,用于将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;
执行模块12,在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
关于定时任务处理装置的具体限定可以参见上文中对于定时任务处理方法的限定,在此不再赘述。
在另一个实施例中,提供了另一种第一类定时任务处理装置,在上述实施例的基础上,上述调整模块11可以包括最小分辨率获取单元和目标分辨率确定单元,其中:
最小分辨率获取单元,用于获取各上述第一类定时任务的定时分辨率中的最小定时分辨率;
目标分辨率确定单元,用于根据上述最小定时分辨率确定上述目标定时分辨率。
在另一个实施例中,提供了另一种第一类定时任务处理装置,在上述实施例的基础上,上述目标分辨率确定单元可以包括取整子单元,该取整子单元,用于对上述最小定时分辨率进行取整,得到上述目标定时分辨率。
可选的,上述取整子单元,具体用于采用预设的指数函数对上述最小定时分辨率进行向下取整,得到上述目标定时分辨率;上述预设的指数函数为2的幂指数函数。
在另一个实施例中,提供了另一种第一类定时任务处理装置,在上述实施例的基础上,在上述获取模块10获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率之前,上述装置还可以包括功耗获取模块和目标线程确定模块,其中:
功耗获取模块,用于获取各上述第一类定时任务的执行功耗;上述第一类定时任务的执行功耗表征线程执行上述第一类定时任务的执行时长;
目标线程确定模块,用于根据各上述第一类定时任务的执行功耗,在预设的映射关系中确定各上述第一类定时任务对应的目标线程;上述映射关系中包括多个执行功耗范围和每个执行功耗范围对应的线程。
可选的,上述目标线程包括系统服务器线程、系统定时器线程和定时器专有线程,上述定时器专有线程对应的执行功耗范围大于上述系统服务器线程对应的执行功耗范围,上述系统服务器线程对应的执行功耗范围大于上述系统定时器线程对应的执行功耗范围。
在另一个实施例中,提供了另一种定时任务处理装置,在上述实施例的基础上,上述装置还可以包括添加模块和删除模块,其中:
添加模块,用于控制第一线程将获取的各第二类定时任务添加至不同的子定时器中;上述不同的子定时器对应不同的内存资源;
删除模块,用于控制不同的第二线程在上述不同的子定时器中删除各上述第二类定时任务。
可选的,上述添加模块可以包括划分单元和添加单元,其中:
划分单元,用于对各上述第二类定时任务进行划分,确定划分的至少一个第二类定时任务群组;
添加单元,用于控制第一线程将上述至少一个第二类定时任务群组添加至不同的子定时器中。
关于定时任务处理装置的具体限定可以参见上文中对于定时任务处理方法的限定,在此不再赘述。上述定时任务处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取各上述第一类定时任务的定时分辨率中的最小定时分辨率;根据上述最小定时分辨率确定上述目标定时分辨率。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
对上述最小定时分辨率进行取整,得到上述目标定时分辨率。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
采用预设的指数函数对上述最小定时分辨率进行向下取整,得到上述目标定时分辨率;上述预设的指数函数为2的幂指数函数。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取各上述第一类定时任务的执行功耗;上述第一类定时任务的执行功耗表征线程执行上述第一类定时任务的执行时长;根据各上述第一类定时任务的执行功耗,在预设的映射关系中确定各上述第一类定时任务对应的目标线程;上述映射关系中包括多个执行功耗范围和每个执行功耗范围对应的线程。
在一个实施例中,上述目标线程包括系统服务器线程、系统定时器线程和定时器专有线程,上述定时器专有线程对应的执行功耗范围大于上述系统服务器线程对应的执行功耗范围,上述系统服务器线程对应的执行功耗范围大于上述系统定时器线程对应的执行功耗范围。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
控制第一线程将获取的各第二类定时任务添加至不同的子定时器中;上述不同的子定时器对应不同的内存资源;控制不同的第二线程在上述不同的子定时器中删除各上述第二类定时任务。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
对各上述第二类定时任务进行划分,确定划分的至少一个第二类定时任务群组;控制第一线程将上述至少一个第二类定时任务群组添加至不同的子定时器中。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取同一线程下的多个第一类定时任务以及各上述第一类定时任务的定时分辨率;上述第一类定时任务的定时分辨率用于表征上述第一类定时任务对应的线程的唤醒周期,各上述第一类定时任务的定时分辨率不同;将各上述第一类定时任务的定时分辨率均调整成目标定时分辨率;在满足上述目标定时分辨率的条件下,控制上述线程执行各上述第一类定时任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取各上述第一类定时任务的定时分辨率中的最小定时分辨率;根据上述最小定时分辨率确定上述目标定时分辨率。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
对上述最小定时分辨率进行取整,得到上述目标定时分辨率。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
采用预设的指数函数对上述最小定时分辨率进行向下取整,得到上述目标定时分辨率;上述预设的指数函数为2的幂指数函数。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取各上述第一类定时任务的执行功耗;上述第一类定时任务的执行功耗表征线程执行上述第一类定时任务的执行时长;根据各上述第一类定时任务的执行功耗,在预设的映射关系中确定各上述第一类定时任务对应的目标线程;上述映射关系中包括多个执行功耗范围和每个执行功耗范围对应的线程。
在一个实施例中,上述目标线程包括系统服务器线程、系统定时器线程和定时器专有线程,上述定时器专有线程对应的执行功耗范围大于上述系统服务器线程对应的执行功耗范围,上述系统服务器线程对应的执行功耗范围大于上述系统定时器线程对应的执行功耗范围。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
控制第一线程将获取的各第二类定时任务添加至不同的子定时器中;上述不同的子定时器对应不同的内存资源;控制不同的第二线程在上述不同的子定时器中删除各上述第二类定时任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
对各上述第二类定时任务进行划分,确定划分的至少一个第二类定时任务群组;控制第一线程将上述至少一个第二类定时任务群组添加至不同的子定时器中。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。