CN114443151A - 一种轮询方法、装置及计算机可读存储介质 - Google Patents
一种轮询方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114443151A CN114443151A CN202210042551.9A CN202210042551A CN114443151A CN 114443151 A CN114443151 A CN 114443151A CN 202210042551 A CN202210042551 A CN 202210042551A CN 114443151 A CN114443151 A CN 114443151A
- Authority
- CN
- China
- Prior art keywords
- communication
- sleep
- polling
- time
- default
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000004891 communication Methods 0.000 claims abstract description 235
- 230000004622 sleep time Effects 0.000 claims abstract description 71
- 230000000977 initiatory effect Effects 0.000 claims abstract description 16
- 230000004617 sleep duration Effects 0.000 claims description 76
- 238000012545 processing Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 12
- 230000036578 sleeping time Effects 0.000 claims description 9
- 230000008859 change Effects 0.000 abstract description 5
- 230000000694 effects Effects 0.000 abstract description 2
- 230000002093 peripheral effect Effects 0.000 description 33
- 230000008569 process Effects 0.000 description 12
- 230000009471 action Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000000737 periodic effect Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4418—Suspend and resume; Hibernate and awake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3041—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is an input/output interface
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种轮询方法、装置及计算机可读存储介质,涉及计算机技术领域。轮询方法包括:读取表征I/O通信结果的信息;根据信息判断是否完成I/O通信;若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长并将睡眠时长作为下一次I/O通信的默认睡眠时长;若未完成I/O通信,则返回至读取表征I/O通信结果的信息的步骤。通过记录从发起I/O通信至完成I/O通信的睡眠时长得知完成一次I/O通信的具体时长,此时对下一次的I/O通信可根据该具体时长进行睡眠,以此实现减少轮询空转的情况以及改善定时轮询不能及时发现设备状态的变化情况。此外,本申请还提供了一种轮询装置和计算机可读存储介质,效果同上。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种轮询方法、装置及计算机可读存储介质。
背景技术
在计算机工作时,运行于CPU(Central Processing Unit,中央处理器)侧软件程序需要与外设器件进行I/O(Input/Output,输入/输出)通信(也称I/O交互),以实现传递数据或进行控制的功能。当CPU侧软件程序发起I/O通信后,外设器件需要一段时间进行处理,等待CPU侧软件程序获取处理结果。也就是说:当外设器件对一段数据的操作还未完成时,CPU侧软件程序获取的数据结果一定是无效的。因此要求CPU侧软件程序在合适的时机获取I/O通信的结果。I/O通信的结果一般包括三种,分别为:已完成I/O通信、未完成I/O通信以及I/O通信出错。
现有的CPU侧软件程序在合适的时机获取I/O通信的结果的方式一般有三种,分别为:CPU侧软件程序通过轮询外设的状态寄存器在合适的时机获取I/O通信的结果、CPU侧软件程序接收外设器件发送至CPU的中断信号在合适的时机获取I/O通信的结果以及CPU侧软件程序通过轮询外设状态寄存器和接收外设器件发送至CPU的中断信号在合适的时机获取I/O通信的结果。上述三种方式不能区分I/O通信任务的复杂程度,在进行轮询操作时,又会出现实时轮询的轮询空转的情况和定时/周期轮询的实时性较差的情况。
鉴于上述存在的问题,寻求一种不出现轮询空转的情况的同时实时性好的轮询方法是本领域技术人员竭力解决的问题。
发明内容
本申请的目的是提供一种轮询方法、装置及计算机可读存储介质,用于实现减少轮询空转的情况的同时改善实时性的目的。
为解决上述技术问题,本申请提供一种轮询方法,包括:
读取表征I/O通信结果的信息;
根据信息判断是否完成I/O通信;
若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长,其中,睡眠时长作为下一次I/O通信的默认睡眠时长;
若未完成I/O通信,则返回至读取表征I/O通信结果的信息的步骤。
优选地,在读取表征I/O通信结果的信息之前,还包括:
创建计时数组,计时数组为按照时间值出现的先后顺序记录时间值的集合且初始化计时数组中的时间值为0。
优选地,若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长,包括:
将计时数组中最先出现的时间值替换为睡眠时长;
判断在预设I/O通信次数中睡眠时长是否相同;
若是,则设定预设系数并根据预设系数计算出默认睡眠时长,其中,系数小于1;
若否,则将睡眠时长更新为默认睡眠时长,其中,更新后默认睡眠时长作为下一次I/O通信的默认睡眠时长。
优选地,在判断在预设I/O通信次数中睡眠时长是否相同之后和在将睡眠时长更新为默认睡眠时长之前,还包括:
计算计时数组中全部时间值的波动范围;
判断睡眠时长是否在波动范围内;
若是,则进入将睡眠时长更新为默认睡眠时长的步骤;
若否,则返回至读取表征I/O通信结果的信息的步骤。
优选地,若未完成I/O通信,则返回至读取表征I/O通信结果的信息的步骤之前,还包括:
判断I/O通信是否已经进行首次睡眠;
若已经进行首次睡眠,则判断是否有参考睡眠时长;
若未进行首次睡眠,则按照默认睡眠时长进行睡眠并返回至读取表征I/O通信结果的信息的步骤;
其中,判断是否有参考睡眠时长,包括:
若有参考睡眠时长,则按照参考睡眠时长进行睡眠并返回至读取表征I/O通信结果的信息的步骤;
若无参考睡眠时长,则进入按照默认睡眠时长进行睡眠并返回至读取表征I/O通信结果的信息的步骤。
优选地,在读取表征I/O通信结果的信息之前和在创建计时数组之后,还包括:
将默认睡眠时长初始化,其中,初始化后的默认睡眠时长为0。
优选地,还包括:当根据表征I/O通信结果的信息判断出错时,进行报错处理。
为解决上述技术问题,本申请还提供了一种轮询装置,包括:
读取模块,用于读取表征I/O通信结果的信息;
判断模块,用于根据信息判断是否完成I/O通信;
记录模块,用于若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长,其中,睡眠时长作为下一次I/O通信的默认睡眠时长;
返回模块,用于若未完成I/O通信,则返回至读取表征I/O通信结果的信息的步骤。
为解决上述技术问题,本申请还提供了一种轮询装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如上述提及的轮询方法的步骤。
为解决上述技术问题,本申请还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述提及的轮询方法的步骤。
本申请所提供的一种轮询方法,包括:读取表征I/O通信结果的信息;根据信息判断是否完成I/O通信;若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长并将睡眠时长作为下一次I/O通信的默认睡眠时长;若未完成I/O通信,则返回至读取表征I/O通信结果的信息的步骤。通过记录从发起I/O通信至完成I/O通信的睡眠时长得知完成一次I/O通信的具体时长,此时对下一次的I/O通信可根据该具体时长进行睡眠,以此实现减少轮询空转的情况以及改善定时轮询不能及时发现设备状态的变化情况。
本申请还提供了一种轮询装置和计算机可读存储介质,效果同上。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种轮询方法的流程图;
图2为本申请实施例所提供的已完成I/O通信的一种轮询方法的流程图;
图3为本申请实施例所提供的未完成I/O通信的一种轮询方法的流程图;
图4为本申请实施例所提供的I/O通信出错的一种轮询方法的流程图;
图5为本申请实施例所提供的一种轮询装置的结构图;
图6为本申请实施例所提供的另一种轮询装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。
本申请的核心是提供一种轮询方法、装置及计算机可读存储介质,其能够实现减少轮询空转的情况以及改善定时轮询不能及时发现设备状态的变化情况。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。
在计算机工作时,运行于中央处理器(Central Processing Unit,CPU)侧软件程序需要与外设器件进行输入/输出(Input/Output,I/O)通信,也称I/O交互,以实现传递数据或进行控制的功能。当CPU侧软件程序发起I/O通信后,外设器件需要一段时间进行处理,等待CPU侧软件程序获取处理结果。也就是说:当外设器件对一段数据的操作还未完成时,CPU侧软件程序获取的数据结果一定是无效的。因此要求CPU侧软件程序在合适的时机获取I/O通信的结果。I/O通信的结果一般包括三种,分别为:已完成I/O通信、未完成I/O通信以及I/O通信出错。
现有的CPU侧软件程序在合适的时机获取I/O通信的结果的方式一般有三种,分别为:CPU侧软件程序通过轮询外设的状态寄存器在合适的时机获取I/O通信的结果、CPU侧软件程序接收外设器件发送至CPU的中断信号在合适的时机获取I/O通信的结果以及CPU侧软件程序通过轮询外设器件和接收外设器件发送至CPU的中断信号在合适的时机获取I/O通信的结果。
状态寄存器用于寄存计算机当前的I/O通信的结果,当CPU侧软件程序通过查询状态寄存器中的内容为已完成I/O通信时,就认为已完成I/O通信时就是获取I/O结果的合适时机。
当外设器件的状态发生改变时,会产生中断信号,并将该中断信号发送至CPU。此时CPU侧软件程序不再轮询外设器件,而是等待外设器件发送至CPU的中断信号,期间CPU可以执行其他软件程序。在这种方式中,I/O通信频率低的设备和不需要频繁I/O通信的设备,普遍采用等待外设器件发送至CPU中断信号的方式,这样的操作能使得CPU在未接收到中断信号的时间执行其他程序。当CPU收到外设器件发送的中断信号时,执行该中断信号对应的中断服务程序,执行完中断服务程序后再恢复执行先前被打断的程序。当CPU收到外设器件发送的中断信号时,CPU都要进行上述操作。若此时采用中断方式进行非常频繁的I/O通信,CPU会产生额外功耗,因此采用等待外设器件发送至CPU中断信号的方式仅适用于I/O通信频率低的设备和不需要频繁I/O通信的设备。
I/O通信频率高的设备一般都有频繁I/O通信需求,CPU侧软件程序常采用轮询方式获取外设器件状态寄存器的状态变化进而与其进行I/O通信。由CPU侧软件程序执行轮询操作,读取状态寄存器的内容并判断其内容是否表示已完成I/O通信,若表示已完成则获取I/O通信的结果,否则立即再次执行轮询动作(也可称为实时轮询)或间隔一个固定周期再次执行轮询动作(定时/周期轮询)。其中,实时轮询是无论外设器件的状态是否发生改变,总是进行轮询操作,若出现轮询空转的情况,消耗CPU资源。定时/周期轮询在两次查询中的间隔时间可以选择进行睡眠,让出CPU执行其他软件程序。可以看出比中断方式少了一些额外开销,但实时性较差。
对于CPU侧软件程序通过轮询外设器件和外设器件发送至CPU的中断信号在合适的时机获取I/O通信的结果,此种方式要求硬件既能产生中断信号又要含有状态寄存器,对硬件要求太高,此时硬件成本成倍增加。初始时CPU侧软件程序与外设器件不进行I/O通信,此时CPU未接收到中断信号,可以执行其他软件程序。当CPU接收到外设器件发送的中断信号,CPU侧软件程序与外设器件进行I/O通信时,切换为轮询操作以处理CPU侧软件程序与外设器件之间进行I/O通信。若一段时间内没有再进行I/O通信则停止轮询,CPU等待外设器件发送下一次中断信号。此种方式不能区分I/O通信任务的复杂程度,在进行轮询操作时,又会出现上述提及的实时轮询的轮询空转的情况和定时/周期轮询的实时性较差的情况。
鉴于上述存在的问题,本申请提供了一种轮询方法。图1为本申请实施例所提供的一种轮询方法的流程图。如图1所示,该轮询方法包括:
S10:读取状态寄存器中用于表征I/O通信结果的信息。
S11:根据信息判断状态寄存器是否完成I/O通信。
S12:记录从状态寄存器发起I/O通信至状态寄存器完成I/O通信的睡眠时长并按照睡眠时长进行睡眠。
需要说明的是,当执行完S11步骤后,若状态寄存器完成I/O通信,则进入S12步骤;若状态寄存器未完成I/O通信,则返回至S10步骤。在本实施例中所提及的状态寄存器是指外设器件并非CPU中的状态寄存器。该状态寄存器主要存放外设器件当前工作状态的信息,比如:忙碌(正在进行I/O通信,即未完成I/O通信)、完成(已完成I/O通信)、空闲(未进行I/O通信,可以理解为已完成前一个I/O通信或还未进行I/O通信)、错误(多种可能性导致的错误)。
在本实施例中所提及的轮询方法,通过记录从发起I/O通信至完成I/O通信的睡眠时长得知完成一次I/O通信的具体时长,此时对下一次的I/O通信可根据该具体时长进行睡眠,以此实现减少轮询空转的情况以及改善定时轮询不能及时发现设备状态的变化情况。
图2为本申请实施例所提供的已完成I/O通信的一种轮询方法的流程图。在上述实施例的基础上,作为一种更优的实施例,如图2所示,在读取状态寄存器中用于表征I/O通信结果的信息之前,还包括:
S20:创建计时数组。
计时数组为按照时间值出现的先后顺序记录时间值的集合且初始化计时数组中的时间值为0。
在本实施例中,首先需要创建计时数组,该计时数组为可记录多个时间值的计时数组,初始化为全0。可以将该计时数组看做一个集合,将计时数组中记录的时间值看做集合中的元素,将记录的时间值全部存放于该计时数组中,便于管理以及进行后续的比较。其中,需要说明的是,计时数组中记录的时间值为进行一次I/O通信并或得I/O通信结果的时长。且记录的时间值的个数与进行I/O通信的次数相等。例如将该计时数组设置为可记录3个时间值,一开始将3个时间值都赋值为0,后续可以记录最近3次等待I/O结果时长。需要说明的是,若为了提高进行I/O通信的效率,可设置多个计时数组,在本实施例中,对于计时数组中能存放时间值的个数的最大值不作限定,可以为1个,也可以为100个,但为了计算机正常工作,应选用合适的时间值个数,一般设置为5个或10个。
读取表征I/O通信结果的信息表征I/O通信结果为已完成时,在上述实施例的基础上,作为一种更优的实施例,若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长,包括:
S21:将计时数组中最先出现的时间值替换为睡眠时长。
S22:判断在预设I/O通信次数中睡眠时长是否相同。
S23:设定预设系数并根据预设系数计算出默认睡眠时长。
S24:将睡眠时长更新为默认睡眠时长。
需要说明的是,当判断在预设I/O通信次数中睡眠时长相同时,设定预设系数并根据预设系数计算出默认睡眠时长,其中,系数小于1。
当判断在预设I/O通信次数中睡眠时长不同时,将睡眠时长更新为默认睡眠时长,其中,更新后的默认睡眠时长作为下一次I/O通信的默认睡眠时长。
在本实施例中,需要说明的是,此处提及的系数可以为0.9,也可以为0.8,还可以为0.5,但所提及的系数的具体值仅仅是众多实施例中的几个实施例,并不代表系数的值只能为0.9、0.8、0.5。睡眠时长可以通过公式:默认睡眠时长=睡眠时长*系数进行计算。并按照计算出的默认时长进行睡眠。由于系数为小于1的数,因此默认睡眠时长小于睡眠时长。在本实施例中,由于系数为小于1的数,因此可以将默认睡眠时长以小步进单位逐渐确定一次I/O通信的时长,进而确定睡眠时长的具体值。
在上述实施例的基础上,作为一种更优的实施例,在判断在预设I/O通信次数中睡眠时长是否相同之后和在将睡眠时长更新为默认睡眠时长之前,还包括:
S25:计算计时数组中全部时间值的波动范围。
S26:判断睡眠时长是否在波动范围内。
若是,则进入S25的步骤。
若否,则返回至S10的步骤。
在本实施例中,需要说明的是,计算计时数组中全部时间值的波动范围有两种方式。第一种方式为,在上述实施例中提及在计时数组中记录3组时间值,因此在本实施例中以计时数组中有3个时间值为例,得出3组时间值分别为10us、15us、20us。对于10us来说设置其范围为8-12us,对于15us来说设置其范围为13-17us,对于20us来说设置其范围为18-22us,根据的三组范围综合设定一个适合多个时间值的波动范围为每个时间值±2us。第二种方式为,在上述实施例中提及在计时数组中记录3组时间值,因此在本实施例中以计时数组中有3个时间值为例,得出3组时长分别为10us、15us、20us。取3组时长的平均值为15us,并设定平均值15us的范围为13-17us,此时只要求时长的平均值在13-17us的范围即符合要求。由此可知,取平均时间值后,其波动范围为时间值的平均值±2us。在本实施例中,对于以哪种方式计算得出的波动范围不作要求,只要得出的波动范围能将时间值涵盖在合理范围内即可。需要说明的是,上述提及的每个时间值±2us和平均值±2us只是众多实施例中的一种,波动范围还可以是每个时间值±3us和平均值±3us,更可以是每个时间值±0.1us和平均值±0.1us。
图3为本申请实施例所提供的未完成I/O通信的一种轮询方法的流程图。读取表征I/O通信结果的信息为未完成时,在上述实施例的基础上,作为一种更优的实施例,如图3所示,若未完成I/O通信,则返回至表征I/O通信结果的信息的步骤之前,还包括:
S30:判断I/O通信是否已经进行首次睡眠。
S31:判断是否有参考睡眠时长。
S32:按照默认睡眠时长进行睡眠。
其中,若已经进行首次睡眠,则进入S31的步骤;若未进行首次睡眠,则按照默认睡眠时长进行睡眠并返回至S10的步骤。
其中,判断是否有参考睡眠时长,包括:
S33:按照参考睡眠时长进行睡眠。
S34:按照默认睡眠时长进行睡眠。
其中,若有参考睡眠时长,则按照参考睡眠时长进行睡眠并返回至S10的步骤;若无参考睡眠时长,则进入按照默认睡眠时长进行睡眠并返回至S10的步骤。
在本实施例中,参考睡眠时长为提前设置好的睡眠时长,该参考睡眠时长通常情况下会小于上述提及的睡眠时长。通过判断I/O通信是否已经进行首次睡眠确定本次I/O通信是否能根据默认睡眠时长进行睡眠。当已经进行首次睡眠后,判断是否有参考睡眠时长,若有参考睡眠时长则根据参考睡眠时长进行睡眠。能在一定程度上起到节约计算机功耗的作用。
图4为本申请实施例所提供的I/O通信出错的一种轮询方法的流程图。在上述实施例的基础上,作为一种更优的实施例,如图4所示,在读取表征I/O通信结果的信息之前和在创建计时数组之后,还包括:
S35:将默认睡眠时长初始化。其中,初始化后的默认睡眠时长为0。
由于在上述实施例中,将睡眠时长赋值给默认睡眠时长,此时默认睡眠时长相当于进行了一次更新;此外,根据预设系数计算出默认睡眠时长的步骤中,根据计算出来的默认睡眠时长进行睡眠,此时默认睡眠时长也相当于将初始化的默认睡眠时长进行了更新。由此可见,默认睡眠时长在发生变化,因此要将默认睡眠时长初始化。
在上述实施例的基础上,作为一种更优的实施例,还包括:
S40:当根据表征I/O通信结果的信息判断出错时,进行报错处理。用于及时提示技术人员本次I/O通信出错。
该轮询方法的整体应用流程如下:
创建一个可记录多个时间值的计时数组,将其全部进行初始化,且初始化后,其中时间值全部为0。该计时数组后续用于记录最近多次I/O通信的等待I/O通信结果的时长。例如该计时数组可记录3个元素,一开始都进行初始化,且赋值为0,后续可以记录最近3次等待I/O通信结果的时长。
将默认睡眠时长初始化为0。
上述提及的需要进行初始化的步骤都发生在系统初始化阶段,且还未进行I/O通信时。当发起I/O通信之后进行读取表征I/O通信结果的信息。
根据表征I/O通信结果的信息做以下不同处理:
当表征I/O通信结果的信息表示未完成I/O通信时,则:
需要判断当前是否将要进行本次I/O通信的首次睡眠,若是已经进行了首次睡眠并且参考睡眠时长不等于0(前次进行I/O通信的参考睡眠时长有效,如20us),则按照参考睡眠时长(20us)进行首次睡眠,否则按照默认睡眠时长(预先给定的单位睡眠时长,如1us)进行睡眠。睡眠期间操作系统会在CPU上调度运行其他软件程序。
此时,若无前次参考睡眠时长(比如首次发生I/O通信时)则以很短的默认睡眠时长作为周期进行轮询,当查询到表征I/O通信结果的信息表示已完成I/O通信,会进行下一次的I/O通信,并计算出睡眠时长,需要说明的是,得到该睡眠时长可以通过计时装置进行计时得出,也可以通过公式:睡眠时长=默认睡眠时长*轮询次数计算得出。
若将要进行本次I/O通信的首次睡眠而且有前次I/O通信参考睡眠时长,此时直接用参考睡眠时长;若已不是本次I/O通信的首次睡眠则说明参考睡眠时长对本次I/O通信不够用,需要以很短的默认睡眠时长作为轮询周期进行多次轮询,直到查询到表征I/O通信结果的信息表示已完成I/O通信,进行下一次的I/O通信后,再次进行读取表征I/O通信结果的信息的操作。
当表征I/O通信结果的信息表示已完成I/O通信时,则:
记录本次I/O通信从发起至轮询到表征I/O通信结果的信息表示已完成I/O通信时的睡眠时长,需要说明的是,得到该睡眠时长可以通过计时装置进行计时得出,也可以通过本次I/O通信所经历的默认睡眠时长进行求和计算得出。
将上述得到的睡眠时长放入计时数组中,并替换掉计时数组中最旧的一个时间值。保证计时数组记录的一直是最近几次I/O通信的睡眠时长。
判断计时数组中最新的几个时间值是否一样。若一样就说明最近几次I/O通信都只进行了首次睡眠就得到了I/O通信的结果,此时可以认为近期I/O通信的任务变得比之前轻,可以略微缩短参考睡眠时长,使下次I/O通信的首次睡眠稍短一些。此处可以通过设置一个小于1的系数实现。例如,最近几次I/O通信的睡眠时长都是20us,系数设定为0.9,按上述提及的公式:默认睡眠时长=睡眠时长*系数,计算得出此时的默认睡眠时长=20us*0.9=18us,则下次I/O通信的首次睡眠就为18us。此时即完成了将默认睡眠时长更新为18us。若不一样就说明最近几次I/O通信任务的轻重有波动,不应缩短参考睡眠时长。
计算计时数组中全部时间值的合理上下波动范围。若睡眠时长在计算出来的波动范围内,说明本次I/O通信任务重量与前面进行的多次I/O通信任务的轻重相似,更新睡眠时长作为下次I/O通信的参考睡眠时长。若睡眠时长不在波动范围内,说明本次I/O通信任务可能突然变得很重或很轻,可能是一个突发的临时I/O通信任务或突发出现环境干扰,导致耗时进行了剧烈波动,这样的波动不确定是否会连续出现多次,因此,此时不更新参考睡眠时长。
当本次I/O通信完全结束后,若再有I/O通信,此时需要等待I/O通信的结果,进行读取表征I/O通信结果的信息的操作,以此开始下次I/O通信的轮询。
当表征I/O通信结果的信息表示出现错误时,则:
进行报错处理。比如:重新进行本次I/O通信或将状态寄存器复位等。
在上述实施例中,对于轮询方法进行了详细描述,本申请还提供轮询装置对应的实施例。
图5为本申请实施例所提供的一种轮询装置的结构图。如图5所示,本申请还提供了一种轮询装置,包括:
读取模块50,用于读取表征I/O通信结果的信息;
判断模块51,用于根据信息判断是否完成I/O通信;
记录模块52,用于若完成I/O通信,则记录从发起I/O通信至完成I/O通信的睡眠时长其中,睡眠时长作为下一次I/O通信的默认睡眠时长;
返回模块53,用于若未完成I/O通信,则返回至读取表征I/O通信结果的信息的步骤。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
图6为本申请实施例所提供的另一种轮询装置的结构图。如图6所示,轮询装置包括:
存储器60,用于存储计算机程序;
处理器61,用于执行计算机程序时实现如上述实施例中所提到的轮询方法的步骤。
本实施例提供的轮询装置可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
其中,处理器61可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器61可以采用DSP(Digital Signal Processor,数字信号处理器)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器61也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU;协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器61可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器61还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器60可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器60还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器60至少用于存储以下计算机程序,其中,该计算机程序被处理器61加载并执行之后,能够实现前述任一实施例公开的轮询方法的相关步骤。另外,存储器60所存储的资源还可以包括操作系统和数据等,存储方式可以是短暂存储或者永久存储。其中,操作系统可以包括Windows、Unix、Linux等。
在一些实施例中,轮询装置还可包括有显示屏、输入输出接口、通信接口、电源以及通信总线。
本领域技术人员可以理解,图6中示出的结构并不构成对轮询装置的限定,可以包括比图示更多或更少的组件。
本申请实施例提供的轮询装置,包括存储器60和处理器61,处理器61在执行存储器存储的程序时,能够实现上述提及的轮询方法。
最后,本申请还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本申请所提供的一种轮询方法、装置及计算机可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种轮询方法,其特征在于,包括:
读取表征I/O通信结果的信息;
根据所述信息判断是否完成所述I/O通信;
若完成所述I/O通信,则记录发起所述I/O通信至完成所述I/O通信的睡眠时长,其中,所述睡眠时长作为下一次I/O通信的默认睡眠时长;
若未完成所述I/O通信,则返回至所述读取表征I/O通信结果的信息的步骤。
2.根据权利要求1所述的轮询方法,其特征在于,在所述读取表征I/O通信结果的信息之前,还包括:
创建计时数组,所述计时数组为按照时间值出现的先后顺序记录所述时间值的集合且初始化计时数组中的所述时间值为0。
3.根据权利要求2所述的轮询方法,其特征在于,所述若完成所述I/O通信,则记录从发起所述I/O通信至完成所述I/O通信的睡眠时长,包括:
将所述计时数组中最先出现的所述时间值替换为所述睡眠时长;
判断在预设I/O通信次数中所述睡眠时长是否相同;
若是,则设定预设系数并根据所述预设系数计算出所述默认睡眠时长,其中,所述系数小于1;
若否,则将所述睡眠时长更新为所述默认睡眠时长,其中,更新后的所述默认睡眠时长作为下一次I/O通信的默认睡眠时长。
4.根据权利要求3所述的轮询方法,其特征在于,在所述判断在预设I/O通信次数中所述睡眠时长是否相同之后和在所述将所述睡眠时长更新为所述默认睡眠时长之前,还包括:
计算所述计时数组中全部所述时间值的波动范围;
判断所述睡眠时长是否在所述波动范围内;
若是,则进入所述将所述睡眠时长更新为所述默认睡眠时长的步骤;
若否,则返回至所述读取表征I/O通信结果的信息的步骤。
5.根据权利要求1所述的轮询方法,其特征在于,所述若未完成所述I/O通信,则返回至所述读取表征I/O通信结果的信息的步骤之前,还包括:
判断所述I/O通信是否已经进行首次睡眠;
若已经进行首次睡眠,则判断是否有参考睡眠时长;
若未进行首次睡眠,则按照所述默认睡眠时长进行睡眠并返回至所述读取表征I/O通信结果的信息的步骤;
其中,所述判断是否有参考睡眠时长,包括:
若有所述参考睡眠时长,则按照所述参考睡眠时长进行睡眠并返回至所述读取表征I/O通信结果的信息的步骤;
若无所述参考睡眠时长,则进入所述按照所述默认睡眠时长进行睡眠并返回至所述读取表征I/O通信结果的信息的步骤。
6.根据权利要求3所述的轮询方法,其特征在于,在所述读取表征I/O通信结果的信息之前和在所述创建计时数组之后,还包括:
将所述默认睡眠时长初始化,其中,初始化后的所述默认睡眠时长为0。
7.根据权利要求1所述的轮询方法,其特征在于,还包括:当根据所述表征I/O通信结果的信息判断出错时,进行报错处理。
8.一种轮询装置,其特征在于,包括:
读取模块,用于读取表征I/O通信结果的信息;
判断模块,用于根据所述信息判断是否完成所述I/O通信;
记录模块,用于若完成所述I/O通信,则记录发起所述I/O通信至完成所述I/O通信的睡眠时长,其中,所述睡眠时长作为下一次I/O通信的默认睡眠时长;
返回模块,用于若未完成所述I/O通信,则返回至所述读取表征I/O通信结果的信息的步骤。
9.一种轮询装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任意一项所述的轮询方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述的轮询方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210042551.9A CN114443151A (zh) | 2022-01-14 | 2022-01-14 | 一种轮询方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210042551.9A CN114443151A (zh) | 2022-01-14 | 2022-01-14 | 一种轮询方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114443151A true CN114443151A (zh) | 2022-05-06 |
Family
ID=81367338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210042551.9A Pending CN114443151A (zh) | 2022-01-14 | 2022-01-14 | 一种轮询方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443151A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089784A1 (en) * | 2007-09-28 | 2009-04-02 | Walters Glen R | Variable polling interval based on historical timing results |
CN102047305A (zh) * | 2008-05-30 | 2011-05-04 | 美国索尼电脑娱乐有限责任公司 | 文件输入/输出调度器 |
CN102708006A (zh) * | 2011-03-28 | 2012-10-03 | 微软公司 | 处理优化负载调整 |
CN107257953A (zh) * | 2015-03-27 | 2017-10-17 | 英特尔公司 | 测量并向主机报告固态驱动器的输入和输出操作的等待时间 |
CN107861897A (zh) * | 2017-11-06 | 2018-03-30 | 郑州云海信息技术有限公司 | 一种中断和轮询触发方法、系统、设备及计算机存储介质 |
CN108369446A (zh) * | 2015-12-14 | 2018-08-03 | 高通股份有限公司 | 动态预测唤醒技术 |
CN110018789A (zh) * | 2019-03-26 | 2019-07-16 | 记忆科技(深圳)有限公司 | 动态适配NAND的Tr和Tprom时间的方法、装置及存储介质 |
KR102175999B1 (ko) * | 2019-06-11 | 2020-11-06 | 성균관대학교산학협력단 | 컴퓨터 시스템에서의 입출력 완료 방법 및 이를 위한 컴퓨터 시스템 |
CN112115080A (zh) * | 2019-06-19 | 2020-12-22 | 英特尔公司 | 用于生成输入/输出性能度量的技术 |
US20210081313A1 (en) * | 2019-09-16 | 2021-03-18 | SK Hynix Inc. | Memory controller and operating method thereof |
-
2022
- 2022-01-14 CN CN202210042551.9A patent/CN114443151A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089784A1 (en) * | 2007-09-28 | 2009-04-02 | Walters Glen R | Variable polling interval based on historical timing results |
CN102047305A (zh) * | 2008-05-30 | 2011-05-04 | 美国索尼电脑娱乐有限责任公司 | 文件输入/输出调度器 |
CN102708006A (zh) * | 2011-03-28 | 2012-10-03 | 微软公司 | 处理优化负载调整 |
CN107257953A (zh) * | 2015-03-27 | 2017-10-17 | 英特尔公司 | 测量并向主机报告固态驱动器的输入和输出操作的等待时间 |
CN108369446A (zh) * | 2015-12-14 | 2018-08-03 | 高通股份有限公司 | 动态预测唤醒技术 |
CN107861897A (zh) * | 2017-11-06 | 2018-03-30 | 郑州云海信息技术有限公司 | 一种中断和轮询触发方法、系统、设备及计算机存储介质 |
CN110018789A (zh) * | 2019-03-26 | 2019-07-16 | 记忆科技(深圳)有限公司 | 动态适配NAND的Tr和Tprom时间的方法、装置及存储介质 |
KR102175999B1 (ko) * | 2019-06-11 | 2020-11-06 | 성균관대학교산학협력단 | 컴퓨터 시스템에서의 입출력 완료 방법 및 이를 위한 컴퓨터 시스템 |
CN112115080A (zh) * | 2019-06-19 | 2020-12-22 | 英特尔公司 | 用于生成输入/输出性能度量的技术 |
US20210081313A1 (en) * | 2019-09-16 | 2021-03-18 | SK Hynix Inc. | Memory controller and operating method thereof |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3091434B1 (en) | Chip starting method, multi-core processor chip and storage medium | |
US20150268996A1 (en) | Real-Time Multi-Task Scheduling Method and Apparatus | |
AU2015203316B2 (en) | Intelligent application back stack management | |
CN109375956B (zh) | 一种重启操作系统的方法、逻辑设备以及控制设备 | |
CN104932933A (zh) | 一种获取自旋锁的方法及装置 | |
CN111143039A (zh) | 一种虚拟机的调度方法、装置及计算机存储介质 | |
CN113515382A (zh) | 云资源的分配方法、装置、电子设备及程序产品 | |
CN111104178A (zh) | 一种动态库加载方法、终端装置及存储介质 | |
CN109889406B (zh) | 用于管理网络连接的方法、装置、设备和存储介质 | |
WO2022148086A1 (zh) | 信息处理方法、装置、设备及存储介质 | |
CN110851297A (zh) | 一种接口抖动状态的处理方法、装置、系统及介质 | |
CN109102200B (zh) | 一种定时任务处理方法及装置 | |
CN112667442A (zh) | 基于非易失内存器件启动系统的控制方法、装置及设备 | |
CN114443151A (zh) | 一种轮询方法、装置及计算机可读存储介质 | |
CN112732556A (zh) | 分布式系统的自动化测试方法、装置、设备及存储介质 | |
CN115756996B (zh) | 一种芯片测试方法、装置、设备及可读存储介质 | |
CN111078384A (zh) | 核心数据迁移的方法、装置、计算机设备及存储介质 | |
CN110192183B (zh) | 计算机装置、任务启动方法以及计算机可读的存储介质 | |
CN114780166A (zh) | 引脚配置的方法、相关装置、设备以及可读存储介质 | |
CN114721876A (zh) | 一种数据备份方法、装置、介质 | |
CN114090054A (zh) | 智能设备升级方法、装置、存储介质及电子设备 | |
CN109542598A (zh) | 定时任务管理方法及装置 | |
EP2975516B1 (en) | Intelligent application back stack management | |
CN112783742B (zh) | 一种统计cpu频率和电压的方法、装置及电子设备 | |
CN112466384B (zh) | 一种闪存编程挂起特性的测试方法、测试装置及测试设备 |
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 |