掌桥专利:专业的专利平台
掌桥专利
首页

一种计时器读取方法、计算设备及可读存储介质

文献发布时间:2023-06-19 11:22:42


一种计时器读取方法、计算设备及可读存储介质

技术领域

本发明涉及计算机领域,尤其涉及一种计时器读取方法、计算设备及可读存储介质。

背景技术

目前计算机普遍采用的是多核CPU,多核CPU就是在一个CPU上嵌入多颗内核。这多颗内核通常共用一个外置计时器。也就是说,外置计时器对于CPU的多颗核心来说是一个共享资源。外置计时器主要为计算机系统提供时钟源,操作系统借助这个时钟源为文件系统、系统时钟、驱动程序、网络协议栈以及应用层的各种应用程序提供时间。

现有技术中,CPU的核心在使用共享资源时需要独占地使用。因此,当CPU的一个核心读取计时器时,如果此时其他核心也需要读取计时器,那么其余的核心需要进行排队等待。等正获取时间的CPU核心读取结束后,其余的核心再依次重新读取该计时器。显然,基于目前的这种读取计时器的方法,CPU的多颗核心就失去了并行性,从而整个计算机系统的性能会大幅下降。

鉴于上述原因,亟需一种优化的计时器读取方法,使并发运行的多个核心读取共享资源计时器时,仍能保持其并发性。

发明内容

为此,本发明提供了一种计时器读取方法、计算设备及可读存储介质,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供一种计时器读取方法,在计算设备中执行,计算设备包括多个CPU核心,多个CPU核心与计时器连接,且计时器与自旋锁关联,该方法包括:多个CPU核心中的第一CPU核心基于读取时间请求,对自旋锁进行加锁处理;第一CPU核心在加锁处理成功时,从计时器读取时间数据,将所读取的时间数据写入时间存储器,释放自旋锁,将时间数据返回给发起读取时间请求的逻辑;第一CPU核心在加锁处理失败时,进入自旋状态,直到自旋锁被释放后退出自旋状态,并将时间存储器中存储的时间数据返回给发起读取时间请求的逻辑。

可选地,在根据本发明的计时器读取方法中,还包括:第一CPU核心在加锁处理成功时,将自身的ID写入ID存储器。

可选地,在根据本发明的计时器读取方法中,在对自旋锁进行加锁处理的步骤之前,还包括:多个CPU核心中的第一CPU核心基于读取时间请求,将自身的ID与ID存储器中的ID进行比对。

可选地,在根据本发明的计时器读取方法中,还包括:当第一CPU核心的ID与ID存储器中的ID相同时,第一CPU核心从计时器读取时间数据;当第一CPU核心的ID与ID存储器中的ID不同时,第一CPU核心对自旋锁进行加锁处理。

可选地,在根据本发明的计时器读取方法中,还包括:第一CPU核心从计时器读取到时间数据后,将ID存储器中的ID清除。

可选地,在根据本发明的计时器读取方法中,时间存储器为内存中的全局变量。

可选地,在根据本发明的计时器读取方法中,ID存储器为内存中的全局变量。

可选地,在根据本发明的计时器读取方法中,计时器为高精度计时器。

根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行根据本发明的计时器读取方法的指令。

根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行根据本发明的计时器读取方法。

根据本发明的计时器读取方法,任一CPU核心需要读取计时器时,首先对自旋锁进行加锁处理。若加锁处理成功,CPU核心从计时器中读取时间数据。在读取到时间数据后,CPU核心首先将读取到的时间数据写入时间存储器,然后释放自旋锁,最后将时间数据返回给发起读取时间请求的逻辑。若加锁处理失败,CPU核心进入自旋状态,直到自旋锁被释放后退出自旋状态,并将时间存储器中存储的时间数据返回给发起读取时间请求的逻辑。可见,基于本发明的计时器读取方法,进入自旋状态的CPU核心直接取用释放自旋锁的核心的读取结果,而不是再去重新获取自旋锁、重新读取计时器。这样,既能够继续保持CPU的多颗核心的并行性,还能在一定程度上加速单颗CPU核心读取计时器的速度,从而可以使计算机系统的性能得到大幅提升。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的整体架构图100;

图2示出了一个现有技术中计时器读取方法200的示意图;

图3示出了根据本发明一个实施例的计时器读取方法300的示意图;

图4示出了根据本发明一个实施例的计算设备400的结构框图;

图5示出了根据本发明一个实施例的计时器读取方法500的流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明的一个实施例的整体架构图100。如图1所示,CPU的多个核心通过总线与一个高精度外置计时器连接。可见,CPU的所有核心是通过一条总线来共用这个高精度外置计时器。因此,当CPU的某个核心需要读取该计时器时,首先要获取总线的控制权。只有获得总线的控制权后,才能进行读取操作。

具体地,当某处逻辑发起读取时间请求后,负责处理这个请求的CPU核心X发起对IO的读取操作,目标地址为高精度外置计时器的端口。当CPU核心X获得总线的控制权后,开始读取高精度外置计时器,并在读取高精度外置计时器期间一直占有总线。待CPU核心X从高精度外置计时器读取到时间后,释放总线,并将读取的结果返回给发起读取时间请求的逻辑。

然而,CPU核心读取高精度外置计时器时,会出现两种特殊情况。其一,高精度外置计时器属于慢速设备,其速度远低于CPU的速度。因此当CPU的一个核心读取高精度外置计时器时,会有比较长的一个等待(阻塞)时间。在此期间,如果其他的核心也有读取该计时器的需求,需要排队等待。其二,多个逻辑同时发起了读取时间请求,此时负责处理这些请求的核心会同时发起对IO的读取操作。由于所有核心是通过一条总线来读取高精度外置计时器,因此负责处理上述请求的CPU核心会竞争总线。只有成功竞争到总线控制权的核心才可以读取高精度外置计时器,其余未竞争到总线控制权的核心需要排队等待。

对于上述两种情况,目前现有技术中采取的处理方法是,等总线被释放后,排队等待的核心再去获取总线的控制权,成功获取到总线控制权的核心再去重新读取高精度外置计时器(图2示出了一个现有技术中计时器读取方法的示意图)。显然,现有技术中的这种处理方法会使CPU的多颗核心失去并行性,进而会降低整个计算机系统的性能。

针对于此,本发明提出了一种计时器的读取方法,其可以使一次计时器的读取结果供多个CPU核心使用,从而在出现上述两种情况时CPU的多颗核心仍然能够保持其并行性。

具体地可参见图3,当CPU的核心需要读取计时器时,首先尝试获取锁资源(即,try_lock)。若获取锁资源成功,进入计时器读取逻辑。若获取锁资源失败,进入自旋状态(即,不断判断自旋锁是否处于锁定状态is_locked)。进入读取逻辑的CPU核心读取计时器结束后,将读取到的时间值写入时间存储器,并释放自旋锁,然后将读取的结果返回。而进入自旋状态的CPU核心待自旋锁被释放后退出自旋状态,并将时间存储器中存储的时间值返回。显然,本发明中待自旋锁被释放后,进入自旋状态的CPU核心没有再去重新获取自旋锁、重新读取计时器,而是直接取用了释放自旋锁的核心的读取结果,从而可以保持CPU多颗核心的并行性。

图4示出了根据本发明一个实施例的计算设备400的结构框图。需要说明的是,图4所示的计算设备400仅为一个示例,在实践中,用于实施本发明的计时器读取方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图4所示的计算设备400相同,也可以与图4所示的计算设备400不同。实践中用于实施本发明的计时器读取方法的计算设备可以对图4所示的计算设备400的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。

如图4所示,在基本的配置402中,计算设备400典型地包括系统存储器406和一个或者多个处理器404。存储器总线408可以用于在处理器404和系统存储器406之间的通信。

取决于期望的配置,处理器404可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器404可以包括诸如一级高速缓存410和二级高速缓存412之类的一个或者多个级别的高速缓存、处理器核心414和寄存器416。示例的处理器核心414可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器418可以与处理器404一起使用,或者在一些实现中,存储器控制器418可以是处理器404的一个内部部分。

取决于期望的配置,系统存储器406可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器404读取。系统存储器406可以包括操作系统420、一个或者多个应用422以及程序数据424。在一些实施方式中,应用422可以布置为在操作系统上由一个或多个处理器404利用程序数据424执行指令。操作系统420例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用422包括用于实现各种用户期望的功能的程序指令,应用422例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用422被安装到计算设备400中时,可以向操作系统420添加驱动模块。

在计算设备400启动运行时,处理器404会从存储器406中读取操作系统420的程序指令并执行。应用422运行在操作系统420之上,利用操作系统420以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用422时,应用422会加载至存储器406中,处理器404从存储器406中读取并执行应用422的程序指令。

计算设备400还包括储存设备432,储存设备432包括可移除储存器436和不可移除储存器438,可移除储存器436和不可移除储存器438均与储存接口总线434连接。

计算设备400还可以包括有助于从各种接口设备(例如,输出设备442、外设接口444和通信设备446)到基本配置402经由总线/接口控制器430的通信的接口总线440。示例的输出设备442包括图形处理单元448和音频处理单元450。它们可以被配置为有助于经由一个或者多个A/V端口452与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口444可以包括串行接口控制器454和并行接口控制器456,它们可以被配置为有助于经由一个或者多个I/O端口458和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备446可以包括网络控制器460,其可以被布置为便于经由一个或者多个通信端口464与一个或者多个其他计算设备462通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

在根据本发明的计算设备400中,程序数据424包括用于执行本发明的计时器读取方法400的指令,该指令可以指示处理器404执行本发明的计时器读取方法。本领域技术人员可以理解,除了用于执行计时器读取方法500的指令之外,程序数据424还可以包括用于实现其他功能的其他指令426。

图5示出了根据本发明一个实施例的计时器读取方法500的流程图,方法500适于在计算设备(例如图4所示的计算设备400)中执行。该计算设备包括多个CPU核心,这多个CPU核心通过总线与计时器连接,并且该计时器与自旋锁关联。其中,计时器与自旋锁关联是指计时器具有自旋锁。更进一步地讲,使用一把自旋锁对计时器进行了加锁。根据本发明的一个实施例,计时器可以为高精度计时器。

如图5所示,本发明的计时器读取方法500始于步骤S510。在步骤S510中,多个CPU核心中的第一CPU核心基于读取时间请求,对自旋锁进行加锁处理。

具体地,当某处逻辑发起读取时间请求后,这个请求会由多个CPU核心中的一个核心进行处理。此时,负责处理该请求的核心尝试对自旋锁进行加锁处理。

根据本发明的一个实施例,某处逻辑发起的读取时间请求由第一CPU核心进行处理。此时,第一CPU核心基于该请求尝试对自旋锁进行加锁处理。其中,第一CPU核心尝试对自旋锁进行加锁处理时,会判断自旋锁的当前状态。作一个示例,自旋锁的当前状态根据锁值的数值来判断。如果自旋锁的当前锁值为零值,表示自旋锁当前为未锁定状态,也就是说当前自旋锁未被任何一个CPU核心持有,那么第一CPU核心就会加锁成功。如果自旋锁的当前锁值为非零值,表示自旋锁当前为锁定状态,也就是说自旋锁当前为被持有状态,那么第一CPU核心就会加锁失败。其中,自旋锁的锁值存储在内存中。

随后进入步骤S520,第一CPU核心在加锁处理成功时,从计时器读取时间数据,将所读取的时间数据写入时间存储器,释放自旋锁,将时间数据返回给发起读取时间请求的逻辑。

具体地,当第一CPU核心对自旋锁加锁成功后,第一CPU核心开始进入计时器读取逻辑。在读取计时器结束后,第一CPU核心将读取到的时间数据写入时间存储器,并释放自旋锁,然后将读取到的时间数据返回给发起读取时间请求的逻辑,即将时间数据返回到读取时间的那段程序代码处。其中,时间存储器为内存中的一个全局变量。

随后进入步骤S530,第一CPU核心在加锁处理失败时,进入自旋状态,直到自旋锁被释放后退出自旋状态,并将时间存储器中存储的时间数据返回给发起读取时间请求的逻辑。

第一CPU核心对自旋锁加锁失败后,其进入自旋状态。进入自旋状态后,第一CPU核心会一直在那里循环并不断判断自旋锁是否被持有者释放。自旋锁一旦被持有者释放,第一CPU核心会立马退出自旋状态(为了便于后续描述,假设自旋锁是被持有者CPU核心Y释放)。然后,第一CPU核心将时间存储器中存储的时间数据返回给发起读取时间请求的逻辑。在此需要说明两点。

其一,第一CPU核心将时间存储器中存储的时间数据返回给发起读取时间请求的逻辑基于的根本条件是自旋锁被持有者CPU核心Y释放。而自旋锁被CPU核心Y释放,则表示CPU核心Y已将从计时器读取的时间数据写入了时间存储器。因此,第一CPU核心返回给发起读取时间请求的逻辑的时间数据就是CPU核心Y从计时器中读取到的时间数据。

其二,第一CPU核心对自旋锁加锁失败的原因是CPU核心Y当时正持有自旋锁。也就是说,第一CPU核心基于读取时间请求来对自旋锁进行加锁时,CPU核心Y当时正在读取计时器。因此,CPU核心Y从计时器中读取到的时间数据正是第一CPU核心想要获取的时间数据。

基于上述两点说明可以确定,第一CPU核心退出自旋状态后,第一CPU核心完全可以将时间存储器存储的时间数据返回给发起读取时间请求的逻辑。

显然,本发明中待自旋锁被释放后,进入自旋状态的CPU核心没有再去重新获取自旋锁、重新读取计时器,而是直接取用了释放自旋锁的核心的读取结果,保持了CPU多颗核心的并行性。

以下将通过一个示例来对任一CPU核心使用本发明的计时器读取方法所达到的效果进行说明。假设CPU的核心总个数为y,一个CPU核心进入计时器读取逻辑后读取计时器用时为x。并且,将一个CPU核心读取计时器的最长用时的一半作为这个CPU核心读取计时器的平均时间。

在未使用本发明的情况下,当一个CPU核心来读取计时器时,最好的情况是不需要排队,此时这颗CPU核心读取计时器的时间为x。最坏的情况是所有CPU核心同时需要读取计时器,并且该CPU核心是最后一个读取到计时器的核心,此时这颗CPU核心读取计时器的时间为xy。在未使用本发明的情况下,这颗核心读取计时器的平均时间为xy/2。

在使用本发明计时器读取的方法的情况下,当一个核心来读取计时器时,最好的情况是其刚准备进入自旋状态时另一个核心读取计时器完成,此时这颗核心读取计时器的时间理论上为0。最坏的情况是自旋锁处于未锁定状态时其需要读取计时器,此时这颗核心读取计时器的时间为x。在使用本发明计时器读取的方法的情况下,这颗核心读取计时器的平均时间为x/2。

可见,利用本发明的计时器读取方法不仅能够使并发运行的多个核心读取计时器时仍能保持其并发性,而且还能在一定程度上加速单颗CPU核心读取计时器的速度,从而可以使整个计算机系统的性能得到大幅提升。

根据本发明的一个实施例,计时器读取方法的示例性代码如下:

另外,如果某一CPU核心Z基于任务m读取计时器时(这里是指CPU核心Z获取到自旋锁至释放自旋锁这个期间),由于任务调度或硬件中断切换到了另一个任务n中,并且任务n也是读取时间,那么系统会进入死锁状态。具体而言,CPU核心Z被中断时未对自旋锁进行解锁,因此当CPU核心Z基于任务n重新来尝试获取锁资源时(即,对自旋锁进行加锁处理),自旋锁处于的是锁定状态,从而CPU核心Z会获取锁资源失败。并且,其他任何一个CPU核心再来尝试获取该自旋锁时都会基于相同的理由获取失败。也就是说,任何一个CPU核心再来获取锁资源时都会进入自旋状态,从而系统就会进入死锁状态。

根据本发明的一个实施例,为了防止发生上述死锁的情况,第一CPU核心在加锁处理成功后,还将自身的ID(即第一CPU核心的ID)写入ID存储器。其中,ID存储器为内存中的全局变量。

并且,多个CPU核心中的第一CPU核心基于读取时间请求,对自旋锁进行加锁处理之前,第一CPU核心会先将自身的ID与ID存储器中的ID进行比对。

当第一CPU核心的ID与所述ID存储器中的ID相同时,第一CPU核心从计时器读取时间数据。也就是说,当第一CPU核心的ID与所述ID存储器中的ID相同时,第一CPU核心跳过获取锁的步骤,直接进入计时器读取逻辑。其中,第一CPU核心通过ID比对进入计时器读取逻辑以后的具体步骤,与第一CPU核心通过对自旋锁进行加锁进入计时器读取逻辑以后的具体步骤相同,在此不再赘述。

但需指出一点,第一CPU核心无论是通过ID比对直接进入的计时器读取逻辑,还是通过对自旋锁进行加锁进入的计时器读取逻辑,在从计时器读取到时间数据后,第一CPU核心都需将ID存储器中的ID清除,例如可以是将-1写入ID存储器。作一个示例,第一CPU核心从计时器读取到时间后,首先将读取到的时间数据写入时间存储器、将-1写入ID存储器,然后释放自旋锁,最后将读取到的时间数据返回给发起读取时间请求的逻辑。其中,对于清除ID存储器中存储的ID的方法,在此不作具体限定。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。

当第一CPU核心的ID与ID存储器中的ID不同时,第一CPU核心对自旋锁进行加锁处理。其中,关于加锁处理以后的具体步骤上述实施例中已经详细公开,在此不再赘述。其也可以理解为,当第一CPU核心的ID与ID存储器中的ID不同时,就进入上述步骤S510。

可见,本发明中与ID存储器中的ID相同的核心可以跳过获取锁的步骤,直接进入计时器读取逻辑。这样,即使出现了某一CPU核心读取计时器时转去处理了另一个读取时间任务的状况,该CPU核心还是可以通过ID比对的方法进入计时器的读取逻辑,从而能够避免死锁的发生。

为了更好的理解本发明的计时器读取方法,下面将通过一个示例来对本发明的计时器读取方法的整个过程进行说明。假设某处逻辑发起了读取时间的请求,这个请求由CPU核心H处理。

CPU核心H基于读取时间请求,将自身的ID与ID存储器中的ID进行比对。如果CPU核心H的ID与ID存储器中的ID相同,CPU核心H直接进入计时器读取逻辑。待读取计时器结束后,CPU核心H将读取到的时间数据写入时间存储器,并将-1写入ID存储器,然后释放自旋锁,最后将读取到的时间数据返回给发起读取时间请求的逻辑。

如果CPU核心H的ID与ID存储器中的ID不同,CPU核心H对自旋锁进行加锁处理。

当CPU核心H对自旋锁加锁处理成功后,CPU核心H将自身的ID写入ID存储器,并从计时器读取时间数据。待读取时间结束后,CPU核心H将所读取的时间数据写入时间存储器,并将-1写入ID存储器,然后释放自旋锁,最后将读取到的时间数据返回给发起读取时间请求的逻辑。

当CPU核心H在加锁处理失败后,其进入自旋状态。待自旋锁被其他的CPU核心释放后,CPU核心H退出自旋状态,并将时间存储器中存储的时间数据返回给发起读取时间请求的逻辑。

根据本发明的计时器读取方法,当CPU的核心基于逻辑的请求需要读取计时器时,首先尝试获取锁资源。若获取到锁资源,进入计时器读取逻辑。若未获取到锁资源,进入自旋状态。进入读取逻辑的CPU核心读取计时器结束后,首先将读取到的时间数据写入时间存储器,然后释放自旋锁,最后将读取的结果返回。而进入自旋状态的CPU核心待自旋锁被释放后退出自旋状态,并将时间存储器中存储的时间值返回。可见,本发明中待自旋锁被释放后,进入自旋状态的CPU核心不再去重新获取自旋锁、重新读取计时器,而是全部直接取用释放自旋锁的核心的读取结果,从而使CPU的多颗核心能够继续保持其并行性。

并且,对于那些在某一CPU核心读取计时器期间产生了读取时间需求的核心来讲,其是直接取用的释放自旋锁的核心的读取结果,从而这些核心获取到计时器的时间所消耗的时长相比于在没有排队的情况下自身去读取计时器所消耗的时长还要短。可见,本发明还能在一定程度上加速单颗CPU核心读取计时器的速度。因此,本发明的计时器读取方法能够大幅提升计算机系统的性能。

进一步地,根据本发明的计时器读取方法,当任一CPU核心对自旋锁加锁成功后,都会将自身的ID写入ID存储器。并且,当任一CPU核心基于逻辑的请求需要读取计时器时,会先将自身的ID与ID存储器中的ID进行比对。与ID存储器中的ID相同的核心跳过获取锁的步骤,直接进入计时器读取逻辑。这样,即使出现了某一CPU核心读取计时器时转去处理了另一个读取时间任务的这种状况,该CPU核心还是可以通过ID比对的方法直接进入计时器的读取逻辑,因此,本发明的计时器读取方法还能够避免死锁的发生。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的文档加载方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

相关技术
  • 一种计时器读取方法、计算设备及可读存储介质
  • 显示方法、装置、计算设备及可读取存储介质
技术分类

06120112901937