CN109213577A - 一种线程睡眠的方法、装置及计算机设备 - Google Patents
一种线程睡眠的方法、装置及计算机设备 Download PDFInfo
- Publication number
- CN109213577A CN109213577A CN201710523203.2A CN201710523203A CN109213577A CN 109213577 A CN109213577 A CN 109213577A CN 201710523203 A CN201710523203 A CN 201710523203A CN 109213577 A CN109213577 A CN 109213577A
- Authority
- CN
- China
- Prior art keywords
- gsec
- sleep
- time
- thread
- current thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Measurement Of The Respiration, Hearing Ability, Form, And Blood Characteristics Of Living Organisms (AREA)
- Telephone Function (AREA)
Abstract
本发明提供了一种线程睡眠的方法、装置及计算机设备,所述方法包括:将获取到的各线程历史睡眠时长的微秒时间存储至预先建立的数组中;获取当前线程的标识ID;基于ID,在数组中查找是否存在与ID对应的时间项;若存在时间项,获取与ID对应的历史睡眠时长的第一微秒时间;利用预设的当前次当前线程需睡眠时长的第二微秒时间及第一微秒时间确定当前线程需睡眠的总微秒时间;确定总微秒时间相对于单位毫秒的毫秒时间M,判断毫秒时间M否为正数,若毫秒时间M为正数,则调用睡眠函数使得当前线程睡眠M毫秒;如此,调用的睡眠函数在执行睡眠时间时可以精确到微秒,确保了线程在睡眠后可以精准苏醒,提高了线程的执行效率。
Description
技术领域
本发明属于通信技术领域,尤其涉及一种线程睡眠的方法、装置及计算机设备。
背景技术
在Windows***上进行开发时,为了降低中央处理器(CPU,Central ProcessingUnit)的消耗,通常会调用***提供的应用程序函数(API,Application ProgrammingInterface)Sleep,使程序睡眠一定时间。
但是该函数的精度不够,在某些情况下当调用该函数使程序睡眠一毫秒时候,不会如期醒来,又影响到线程的执行逻辑,进而影响到线程的运行效率。
基于此,本发明提供一种线程睡眠的方法、装置及计算机设备,以解决现有技术中的上述问题。
发明内容
针对现有技术存在的问题,本发明实施例提供了一种线程睡眠的方法、装置及计算机设备,用于解决现有技术中在通过调用***提供的睡眠函数使得线程睡眠一定时长,以用来降低CPU功耗时,由于睡眠函数的精度不高,线程不能精准苏醒,导致线程的执行效率下降的技术问题。
本发明提供一种线程睡眠的方法,所述方法包括:
将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;
获取当前线程的标识(ID,Identity);
基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
上述方案中,若所述数组中不存在所述时间项,还包括:
在所述数组中添加所述当前ID对应的时间项,并将添加的所述时间项的微秒时间设置为预设的数值。
上述方案中,所述利用预设的当前次所述当前线程需要睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间,包括:
利用公式T1=(timeArray[id]+T)*delta确定所述当前线程需睡眠的总微秒时间T1,其中,所述timeArray[id]为所述第一微秒时间,所述T为所述第二微秒时间;所述delta为线程响应误差。
上述方案中,所述线程响应误差delta根据公式delta=T2/(Tend–Tstart)确定;其中,所述T2为当前线程实际睡眠的第三微秒时间,所述Tstart为开始执行睡眠函数的时间点,所述Tend为所述睡眠函数执行结束的时间点。
上述方案中,当所述delta大于1时,所述当前线程需睡眠的总微秒时间利用公式T3=timeArray[id]+T+(timeArray[id]+T)*(delta–1)确定;其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
上述方案中,当所述delta小于1时,所述当前线程需睡眠的总微秒时间利用公式T4=timeArray[id]+T-(timeArray[id]+T)*(delta–1)确定;其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
上述方案中,所述确定所述总微秒时间相对于一毫秒的毫秒时间M后,还包括:
利用公式U=T1–M*1000确定总微秒时间的剩余微秒时间U,并将所述剩余微秒时间U保存至所述ID对应的时间项中;其中,所述T1为所述当前线程需睡眠的总微秒时间。
本发明还提供一种线程睡眠的装置,所述装置包括:
存储单元,用于将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;
获取单元,用于获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
确定单元,用于利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
调用单元,用于确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:
将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;
获取当前线程的标识ID;
基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
本发明还提供一种线程睡眠的计算机设备,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中,
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上述任一所述的方法。
本发明提供了一种线程睡眠的方法、装置及计算机设备,所述方法包括:将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得当前线程睡眠M毫秒;如此,由于在确定当前线程需睡眠的总微秒时间时,是以微秒级为单位的,调用的睡眠函数在执行睡眠时间时可以精确到微秒,进而提高了睡眠函数的精度,确保了线程在睡眠后可以精准苏醒,提高了线程的执行效率。
附图说明
图1为本发明实施例一提供的线程睡眠方法的流程示意图;
图2为本发明实施例二提供的线程睡眠装置的整体结构示意图;
图3为发明实施例三提供的线程睡眠计算机设备的整体结构示意图。
具体实施方式
用于解决现有技术中在通过调用***提供的睡眠函数使得线程睡眠一定时长,,以用来降低CPU功耗时,由于睡眠函数的精度不高,线程不能精准苏醒,导致线程的执行效率下降的技术问题,本发明提供了一种线程睡眠的方法、装置及计算机设备,所述方法包括:将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得当前线程睡眠M毫秒。
下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。
实施例一
本实施例提供一种线程睡眠的方法,如图1所示,所述方法包括
S101,将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中;
本步骤中,预先建立一个数组timeArray,所述数组的各时间项用于保存各线程历史睡眠时长的微秒时间。需要说明的是,所述各线程历史睡眠时长是指各线程每次执行睡眠函数后,剩余的微秒时间(即不足一毫秒的微秒时间)的叠加总和。
S102,获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
本步骤中,若想调用睡眠函数Usleep来执行当前线程的睡眠时间时,需利用GetCurrentThreadId函数来获取当前线程的标识ID,并基于所述ID,在所述数组timeArray中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间。
若所述数组中不存在所述时间项,还需要在所述数组中添加所述当前ID对应的时间项,并将添加的所述时间项中的微秒时间设置为预设的数值;一般来说预设的数值为0。
S103,利用预设的当前次所述当前线程需睡眠的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
本步骤中,当获取到所述ID对应的历史睡眠时长的第一微秒时间后,利用预设的当前次所述当前线程需睡眠的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;所述预设的当前次当前线程需睡眠时长的第二微秒时间为假设的本次当前线程需睡眠的微秒时间。
具体地,利用公式(1)确定所述当前线程需睡眠的总微秒时间T1;
T1=(timeArray[id]+T)*delta (1)
其中,在公式(1)中,所述timeArray[id]为所述第一微秒时间,所述第一微秒时间实质上是指当前线程在执行本次睡眠函数之前,所述数组中存储的不足一毫秒的微秒时间;所述T为第二微秒时间;所述delta为线程响应误差。所述线程响应误差是用于衡量***执行睡眠函数Usleep的准确度,即当调用睡眠函数Usleep使得当前线程实际睡眠的时间为第三微秒时间T2时,至当前线程睡眠结束继续开始执行的时刻所消耗的时间比。在此将开始执行睡眠函数的时间点记为Tstart,将所述睡眠函数执行结束的时间点记为Tend。
那么,可以利用公式(2)计算所述线程响应误差delta:
delta=T2/(Tend–Tstart) (2)
需要说明的是,当所述delta等于1时,说明预设的当前次当前线程需睡眠时长的第二微秒时间T刚好等于当前线程实际睡眠的第三微秒时间T2;那么第二微秒时间T是非常精准的。
当所述delta大于1时,说明预设的当前次当前线程需睡眠时长的第二微秒时间T大于当前线程实际睡眠的第三微秒时间T2;所以此时要利用公式(3)计算实际的当前线程需睡眠的总微秒时间T3:
T3=timeArray[id]+T+(timeArray[id]+T)*(delta–1) (3)
其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
当所述delta小于1时,说明预设的当前次当前线程需睡眠时长的第二微秒时间T小于当前线程实际睡眠的第三微秒时间T2;所以此时要利用公式(4)计算实际的当前线程需睡眠的总微秒时间T4:
T4=timeArray[id]+T-(timeArray[id]+T)*(delta–1) (4)
其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
而当delta与1之间的误差越小时,说明睡眠函数USleep的精度越大,此时CPU消耗越小,当delta与1之间的误差越大时,说明睡眠函数USleep的精度越小,此时CPU消耗越大。
S104,确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得当前线程睡眠M毫秒。
本步骤中,获取到总微秒时间T1后,利用公式(5)确定所述总微秒时间相对于单位毫秒的毫秒时间M,这样就把睡眠函数精度定位到了微秒级,提高了睡眠函数的精度:
M=floor(T1,1000) (5)
其中,floor为取整函数
然后利用公式(6)确定总微秒时间的剩余微秒时间U,并利用公式(7)将所述剩余微秒时间U保存至与所述ID对应的历史睡眠时间中。
U=T1–M*1000 (6)
timeArray[id]=U (7)
获取到毫秒时间M后,判断所述毫秒时间M否为正数,即是否大于0;若所述毫秒时间M为正数,则调用睡眠函数使得当前线程睡眠M毫秒。若所述毫秒时间M为0,则不会调用所述睡眠函数。
实施例二
相应于实施例一,本实施例还提供一种线程睡眠的装置,如图2所示,所述装置包括:存储单元21、获取单元22、确定单元23及调用单元24;其中,
所述存储单元21用于将获取到的各线程历史睡眠时长的微秒时间的时间项存储至数组timeArray的各时间项中,所述数组timeArray是预先建立的。需要说明的是,所述各线程历史睡眠时长是指各线程每次执行睡眠函数后,剩余的微秒时间(即不足一毫秒的微秒时间)的叠加总和。
而若想调用睡眠函数Usleep来执行当前线程的睡眠时间时,所述获取单元22用于利用GetCurrentThreadId函数获取当前线程的标识ID;基于所述ID,在所述数组timeArray中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
若所述数组中不存在所述时间项,所述获取单元22还需要在所述数组timeArray中添加所述当前ID对应的时间项,并将添加的所述时间项中的微秒时间设置为预设的数值;一般来说预设的数值为0。
当所述获取单元22获取到所述ID对应的历史睡眠时长的第一微秒时间后,所述确定单元23用于利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间。所述预设的当前次当前线程需睡眠时长的第二微秒时间为假设的本次当前线程需睡眠的微秒时间。
具体地,所述确定单元23利用公式(1)确定所述当前线程需睡眠的总微秒时间T1;
T1=(timeArray[id]+T)*delta (1)
其中,在公式(1)中,所述timeArray[id]为所述第一微秒时间,所述第一微秒时间实质上是指当前线程在执行本次睡眠函数之前,所述数组中存储的不足一毫秒的微秒时间;所述T为第二微秒时间;所述delta为线程响应误差。所述线程响应误差是用于衡量***执行睡眠函数Usleep的准确度,即当调用睡眠函数Usleep使得当前线程实际睡眠的时间为第三微秒时间T2时,至当前线程睡眠结束继续开始执行的时刻所消耗的时间比。在此将开始执行睡眠函数的时间点记为Tstart,将所述睡眠函数执行结束的时间点记为Tend。
那么,所述确定单元23还可以利用公式(2)计算所述线程响应误差delta:
delta=T2/(Tend–Tstart) (2)
需要说明的是,当所述delta等于1时,说明预设的当前次当前线程需睡眠时长的第二微秒时间T刚好等于当前线程实际睡眠的第三微秒时间T2;那么第二微秒时间T是非常精准的。
当所述delta大于1时,说明预设的当前次当前线程需睡眠时长的第二微秒时间T大于当前线程实际睡眠的第三微秒时间T2;所以所述确定单元23此时要利用公式(3)计算实际的当前线程需睡眠的总微秒时间T3:
T3=timeArray[id]+T+(timeArray[id]+T)*(delta–1) (3)
其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
当所述delta小于1时,说明预设的当前次当前线程需睡眠时长的第二微秒时间T小于当前线程实际睡眠的第三微秒时间T2;所以所述确定单元23此时要利用公式(4)计算实际的当前线程需睡眠的总微秒时间T4:
T4=timeArray[id]+T-(timeArray[id]+T)*(delta–1) (4)
其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
而当delta与1之间的误差越小时,说明睡眠函数USleep的精度越大,此时CPU消耗越小,当delta与1之间的误差越大时,说明睡眠函数USleep的精度越小,此时CPU消耗越大。
当确定出总微秒时间T1后,所述调用单元24用于利用公式(5)确定所述总微秒时间T1相对于单位毫秒的毫秒时间M,这样就把睡眠函数精度定位到了微秒级,提高了睡眠函数的精度:
M=floor(T1,1000) (5)
其中,floor为取整函数
然后所述调用单元24利用公式(6)确定总微秒时间的剩余微秒时间U,并利用公式(7)将所述剩余微秒时间U保存至与所述ID对应的历史睡眠时间中。
U=T1–M*1000 (6)
timeArray[id]=U (7)
获取到毫秒时间M后,调用单元24判断所述毫秒时间M否为正数,即是否大于0;若所述毫秒时间M为正数,则调用睡眠函数使得当前线程睡眠M毫秒。若所述毫秒时间M为0,则不会调用所述睡眠函数。
实施例三
本实施例还提供一种线程睡眠的计算机设备,如图3所示,所述计算机设备包括:射频(Radio Frequency,RF)电路310、存储器320、输入单元330、显示单元340、音频电路350、WiFi模块360、处理器370、以及电源380等部件。本领域技术人员可以理解,图3中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图3对计算机设备的各个构成部件进行具体的介绍:
RF电路310可用于信号的接收和发送,特别地,将基站的下行信息接收后,给处理器350处理。通常,RF电路310包括但不限于至少一个放大器、收发信机、耦合器、低噪声放大器(Low Noise Amplifier,LNA)、双工器等。
存储器320可用于存储软件程序以及模块,处理器350通过运行存储在存储器320的软件程序以及模块,从而执行计算机设备的各种功能应用以及数据处理。存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元330可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。具体地,输入单元330可包括键盘331以及其他输入设备332。键盘331,可收集用户在其上的输入操作,并根据预先设定的程式驱动相应的连接装置。键盘331采集到输出信息后再送给处理器350。除了键盘331,输入单元330还可以包括其他输入设备332。具体地,其他输入设备332可以包括但不限于触控面板、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元340可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种菜单。显示单元340可包括显示面板341,可选的,可以采用液晶显示器(LiquidCrystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板341。进一步的,键盘331可覆盖显示面板341,当键盘331检测到在其上或附近的触摸操作后,传送给处理器350以确定触摸事件的类型,随后处理器350根据输入事件的类型在显示面板341上提供相应的视觉输出。虽然在图3中键盘331与显示面板341是作为两个独立的部件来实现计算机设备的输入和输入功能,但是在某些实施例中,可以将键盘331与显示面板341集成而实现计算机设备的输入和输出功能。
音频电路350、扬声器351,传声器352可提供用户与计算机设备之间的音频接口。音频电路350可将接收到的音频数据转换后的电信号,传输到扬声器351,由扬声器351转换为声音信号输出;
WiFi属于短距离无线传输技术,计算机设备通过WiFi模块360可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图3示出了WiFi模块360,但是可以理解的是,其并不属于计算机设备的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器370是计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器320内的软件程序和/或模块,以及调用存储在存储器320内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器370可包括一个或多个处理单元;优选的,处理器370可集成应用处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等。
计算机设备还包括给各个部件供电的电源380(比如电源适配器),优选的,电源可以通过电源管理***与处理器370逻辑相连。
本发明提供的线程睡眠的方法、装置及计算机设备能带来的有益效果至少是:
本发明提供了一种线程睡眠的方法、装置及计算机设备,所述方法包括:将获取到的各线程历史睡眠时长的微秒时间存储至数组中的各时间项中,所述数组是预先建立的;获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒;如此,由于在确定当前线程需睡眠的总微秒时间时,是以微秒级为单位的,调用的睡眠函数在执行睡眠时间时可以精确到微秒,进而提高了睡眠函数的精度,确保了线程在睡眠后可以精准苏醒,提高了线程的执行效率。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的网关、代理服务器、***中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读存储介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供;该程序被处理器执行时实现以下步骤:将获取到的各线程历史睡眠时长的微秒时间存储至数组中的各时间项中,所述数组是预先建立的;获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种线程睡眠的方法,其特征在于,所述方法包括:
将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;
获取当前线程的标识ID;
基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
2.如权利要求1所述的方法,其特征在于,若所述数组中不存在所述时间项,还包括:
在所述数组中添加所述当前ID对应的时间项,并将添加的所述时间项的微秒时间设置为预设的数值。
3.如权利要求1所述的方法,其特征在于,所述利用预设的当前次所述当前线程需要睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间,包括:
利用公式T1=(timeArray[id]+T)*delta确定所述当前线程需睡眠的总微秒时间T1,其中,所述timeArray[id]为所述第一微秒时间,所述T为所述第二微秒时间;所述delta为线程响应误差。
4.如权利要求3所述的方法,其特征在于,所述线程响应误差delta根据公式delta=T2/(Tend–Tstart)确定;其中,所述T2为当前线程实际睡眠的第三微秒时间,所述Tstart为开始执行睡眠函数的时间点,所述Tend为所述睡眠函数执行结束的时间点。
5.如权利要求3所述的方法,其特征在于,当所述delta大于1时,所述当前线程需睡眠的总微秒时间利用公式T3=timeArray[id]+T+(timeArray[id]+T)*(delta–1)确定;其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
6.如权利要求3所述的方法,其特征在于,当所述delta小于1时,所述当前线程需睡眠的总微秒时间利用公式T4=timeArray[id]+T-(timeArray[id]+T)*(delta–1)确定;其中,所述(timeArray[id]+T)*(delta–1)为时间差补偿值。
7.如权利要求1所述的方法,其特征在于,所述确定所述总微秒时间相对于一毫秒的毫秒时间M后,还包括:
利用公式U=T1–M*1000确定总微秒时间的剩余微秒时间U,并将所述剩余微秒时间U保存至所述ID对应的时间项中;其中,所述T1为所述当前线程需睡眠的总微秒时间。
8.一种线程睡眠的装置,其特征在于,所述装置包括:
存储单元,用于将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;
获取单元,用于获取当前线程的标识ID;基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
确定单元,用于利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
调用单元,用于确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现以下步骤:
将获取到的各线程历史睡眠时长的微秒时间存储至数组的各时间项中,所述数组是预先建立的;
获取当前线程的标识ID;
基于所述ID,在所述数组中查找是否存在与所述ID对应的时间项;若存在所述时间项,获取与所述ID对应的历史睡眠时长的第一微秒时间;
利用预设的当前次所述当前线程需睡眠时长的第二微秒时间及所述第一微秒时间确定所述当前线程需睡眠的总微秒时间;
确定所述总微秒时间相对于单位毫秒的毫秒时间M,判断所述毫秒时间M否为正数,若所述毫秒时间M为正数,则调用睡眠函数使得所述当前线程睡眠M毫秒。
10.一种线程睡眠的计算机设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中,
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至7任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710523203.2A CN109213577B (zh) | 2017-06-30 | 2017-06-30 | 一种线程睡眠的方法、装置及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710523203.2A CN109213577B (zh) | 2017-06-30 | 2017-06-30 | 一种线程睡眠的方法、装置及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109213577A true CN109213577A (zh) | 2019-01-15 |
CN109213577B CN109213577B (zh) | 2020-09-08 |
Family
ID=64976435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710523203.2A Active CN109213577B (zh) | 2017-06-30 | 2017-06-30 | 一种线程睡眠的方法、装置及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109213577B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023004662A1 (zh) * | 2021-07-29 | 2023-02-02 | 华为技术有限公司 | 延迟产生方法及相关设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101090547A (zh) * | 2007-07-24 | 2007-12-19 | 北京天碁科技有限公司 | 一种td-scdma终端睡眠时钟校准的方法和装置 |
CN101122870A (zh) * | 2007-09-30 | 2008-02-13 | 金蝶软件(中国)有限公司 | 一种线程唤醒控制方法和*** |
CN101206584A (zh) * | 2006-12-18 | 2008-06-25 | 上海未来宽带技术及应用工程研究中心有限公司 | 无积累误差和自适应定时器实现方法 |
US20080155549A1 (en) * | 2006-12-20 | 2008-06-26 | Blinick Stephen L | Method and Apparatus for Adjusting Sleep Time of Fixed High-Priority Threads |
CN106775620A (zh) * | 2016-11-14 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种定时方法及装置 |
CN106815065A (zh) * | 2015-11-27 | 2017-06-09 | 腾讯科技(深圳)有限公司 | 后台应用的唤醒方法及装置、电子设备 |
-
2017
- 2017-06-30 CN CN201710523203.2A patent/CN109213577B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101206584A (zh) * | 2006-12-18 | 2008-06-25 | 上海未来宽带技术及应用工程研究中心有限公司 | 无积累误差和自适应定时器实现方法 |
US20080155549A1 (en) * | 2006-12-20 | 2008-06-26 | Blinick Stephen L | Method and Apparatus for Adjusting Sleep Time of Fixed High-Priority Threads |
CN101090547A (zh) * | 2007-07-24 | 2007-12-19 | 北京天碁科技有限公司 | 一种td-scdma终端睡眠时钟校准的方法和装置 |
CN101122870A (zh) * | 2007-09-30 | 2008-02-13 | 金蝶软件(中国)有限公司 | 一种线程唤醒控制方法和*** |
CN106815065A (zh) * | 2015-11-27 | 2017-06-09 | 腾讯科技(深圳)有限公司 | 后台应用的唤醒方法及装置、电子设备 |
CN106775620A (zh) * | 2016-11-14 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种定时方法及装置 |
Non-Patent Citations (4)
Title |
---|
KING_HHUANG: "VC实现微秒(十万分之一秒)休眠", 《HTTPS://BLOG.CSDN.NET/KING_HHUANG/ARTICLE/DETAILS/6370712》 * |
WU SHUKUI ET.AL: "FPGA-based high-precision network time synchronization research and Implementation", 《THE TENTH INTERNATIONAL CONFERENCE ON ELECTRONIC MEASUREMENT & INSTRUMENTS》 * |
李群: "Linux2.6内核新型高精度定时器的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑(月刊)》 * |
胡通: "Android休眠机制设计与实现综述", 《中国优秀硕士学位论文全文数据库信息科技辑(月刊)》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023004662A1 (zh) * | 2021-07-29 | 2023-02-02 | 华为技术有限公司 | 延迟产生方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109213577B (zh) | 2020-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103500002B (zh) | 应用程序管理的方法、装置及终端设备 | |
CN103401991B (zh) | 一种对终端设备的通信事件进行提示的方法和装置 | |
CN102740321B (zh) | 确定用户存在的技术 | |
KR101722042B1 (ko) | 전력 효율적 로케이션 통지 | |
CN101657783B (zh) | 利用低功率模式控制核工作循环的方法 | |
CN109429310A (zh) | 一种drx参数的指示方法、相关设备及*** | |
EP2882234B1 (en) | Method, apparatus, equipment and system for controlling turn-on and turn-off of wireless network | |
US20100153765A1 (en) | Power state dependent wake-up alarm | |
CN105830016B (zh) | 用户设备的电源管理方法和电源管理装置 | |
US20110107357A1 (en) | TCP/IP Stack-Based Operating System | |
WO2014039207A1 (en) | Power sub-state monitoring and recording | |
CN106484555B (zh) | 异常检测与恢复的方法及移动终端 | |
CN107368400A (zh) | Cpu监测方法、装置、计算机可读存储介质和移动终端 | |
CN106557407A (zh) | 一种设备负载的监控方法和装置 | |
US9519338B2 (en) | Task processing apparatus and method including scheduling current and next-level task processing apparatus | |
US10410129B2 (en) | User pattern recognition and prediction system for wearables | |
CN109978482A (zh) | 工作流处理方法、装置、设备及存储介质 | |
CN106445721B (zh) | 看门狗容错处理的方法及移动终端 | |
KR102060431B1 (ko) | 멀티 코어 시스템의 전력 관리 장치 및 방법 | |
WO2016179900A1 (zh) | 一种路由设备及其节电方法、装置、存储介质 | |
CN103546632A (zh) | 一种用于移动终端的闹铃响铃方法、装置和移动终端 | |
US20170269965A1 (en) | Electronic device and method for resuming process thereof | |
CN109213577A (zh) | 一种线程睡眠的方法、装置及计算机设备 | |
CN110321203A (zh) | 后台进程假死处理方法及客户端 | |
US20130318370A1 (en) | Middleware power management |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230724 Address after: 200000 building 10, No. 860, Xinyang Road, Lingang New District, China (Shanghai) pilot Free Trade Zone, Fengxian District, Shanghai Patentee after: Shanghai Langyu Health Technology (Group) Co.,Ltd. Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |