1.本技术涉及通信技术领域,尤其涉及一种应用进程的输入输出多路复用方法。
背景技术:
2.当前很多服务器和设备的应用进程用的是输入输出多路复用模型。输入输出多路复用,即经典的reactor设计模式,有时也称为异步阻塞输入输出。很多服务器进程或者设备的应用进程都是基于这种reactor模型的异步处理程序。输入输出多路复用模型通过reactor设计模式,将用户线程循环查询输入输出请求状态是否可以继续执行的工作交给reactor循环进行处理,而用户线程在发出输入输出请求后开始执行第二任务。
3.为了加快开发效率,很多程序会应用到第三方的开源代码。某些开源代码的应用程序编辑接口只支持异步调用。在这种异步调用系统中,有时候不可避免要调用阻塞的应用程序编程接口去做远程过程调用。但在这种情况下,阻塞的时间不可预知,例如:完成一个阻塞调用可能需要5至5000毫秒未定,这要根据网络的情况。如果用户线程在调用阻塞的应用程序编程接口时等待至调用结束,用户线程阻塞的时间就会较长,影响系统的性能。
4.为了提高这种异步系统的性能,本技术提供一种应用进程的输入输出多路复用方法,在调用阻塞的应用程序编程接口去做远程过程调用的同时,也可以快速通知用户线程切回异步调用,以减少阻塞时间,提高系统的性能。
技术实现要素:
5.本技术实施例提供一种在调用阻塞的应用程序编程接口去做远程过程调用的同时,也可以快速通知用户线程切回异步调用的应用进程的输入输出多路复用方法的技术方案。
6.具体的,一种应用进程的输入输出多路复用方法,包括:应用进程的用户线程向管理器发起针对第一任务的输入输出请求;管理器选择远程过程调用节点对第一任务进行处理;在用户线程处理第二任务时,管理器根据确定的第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;当第一任务的处理结果处于可读取状态时,管理器通知用户线程进行输入输出操作;用户线程进行对第一任务的处理结果进行输入输出;其中,所述第二轮询周期根据以下方式确定:确定第一轮询周期;第一轮询周期进行步进,形成中间轮询周期;管理器根据所述第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;当第一任务的处理结果处于可读取状态时,管理器计算中间轮询次数;
当中间轮询次数满足预设条件时,将中间轮询周期确定为第二轮询周期。
7.进一步的,所述中间轮询次数满足的预设条件为:通过将中间轮询次数与预设次数进行比较,以确定中间轮询周期递进方向;当所述中间轮询次数大于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递增。
8.进一步的,通过将中间轮询次数与预设次数进行比较,以确定中间轮询周期递进方向;当所述中间轮询次数小于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递减。
9.进一步的,所述中间轮询周期具有最大周期值和最小周期值;所述第一轮询周期的步进表示为:中间轮询周期每次改变的值不得大于最大周期值与最小周期值的差值。
10.进一步的,所述管理器完成一次第一任务的处理后,向远程过程调用节点查询第一任务的处理结果为可读状态;根据已经确定的第二轮询周期,管理器在处理下一次第一任务时,重新计算中间轮询周期。
11.进一步的,所述管理器在处理下一次第一任务时,中间轮询周期的算法表示为:y=a*x b*(1-a)式中,y表示最新一次的中间轮询周期,x表示中间轮询周期的历史值,a表示平滑系数,b表示最新一次的中间轮询次数。
12.进一步的,所述平滑系数用来平衡中间轮询周期历史值和最新值的比重,其取值范围在0与1之间。
13.进一步的,所述预设次数为2次。
14.进一步的,所述第一任务处于未完成时,用户线程的应用程序编辑接口为阻塞状态,管理器向远程过程调用节点查询第一任务的处理结果为不可读状态,用户线程将执行第二任务;管理器通过定期查询第一任务的处理结果的方式,判断是否通知用户线程返回第一任务;当第一任务完成后,管理器向远程过程调用节点查询第一任务的处理结果为可读状态,快速通知用户线程返回第一任务,此时用户线程的应用程序编辑接口已经处于疏通状态,允许用户线程继续执行第一任务的输入输出请求,即可将应用程序编辑接口的超时设置为0。
15.本技术实施例提供的技术方案,至少具有如下有益效果:在本技术的实施例中,当用户线程向管理器发起针对第一任务的输入输出请求后,开始执行第二任务;管理器在处理第一任务的同时,会定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态,当第一任务的处理结果处于可读状态时,管理器会快速通知用户线程返回第一任务,以减少用户线程的阻塞时间,提高系统的性能。
附图说明
16.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1为本技术实施例提供的一种应用进程的输入输出多路复用方法示意图。
17.图2为本技术实施例提供的一种第二轮询周期图。
18.图3为本技术实施例提供的一种中间轮询周期递进方向判断图。
具体实施方式
19.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
20.请参照图1,本技术提供一种应用进程的输入输出多路复用方法实施例,包括:s100:应用进程的用户线程向管理器发起针对第一任务的输入输出请求;s200:管理器选择远程过程调用节点对第一任务进行处理;s300:在用户线程处理第二任务时,管理器根据确定的第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;s400:当第一任务的处理结果处于可读取状态时,管理器通知用户线程进行输入输出操作;s500:用户线程进行对第一任务的处理结果进行输入输出;请参照图2,其中,所述第二轮询周期根据以下方式确定:s310:确定第一轮询周期;s320:第一轮询周期进行步进,形成中间轮询周期;s330:管理器根据所述第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;s340:当第一任务的处理结果处于可读取状态时,管理器计算中间轮询次数;s350:当中间轮询次数满足预设条件时,将中间轮询周期确定为第二轮询周期。
21.可以理解的是,输入输出(input output,io)多路复用是一种以同一传输媒质、线路承载多路信号进行通信的方式,有时也称为异步阻塞输入输出io。此处所述的异步或者同步的概念描述的是用户线程与内核的交互方式。具体的,同步是指用户线程向内核输入输出io请求后,需要等待或者经常返回向内核查询输入输出io请求的完成进度,当内核完成用户线程的输入输出io请求后,用户线程才能继续执行后续操作。而在本技术的方法实施例中,异步是指当用户线程向管理器发起输入输出io请求后继续执行第二任务,当管理器完成用户线程的输入输出io请求后会通知用户线程,或者调用用户线程注册的回调函数,也就是调用用户线程注册的接口。
22.进一步的,所述的阻塞或者非阻塞的概念描述的是用户线程调用内核输入输出io操作的方式。具体的,非阻塞是指当用户线程向内核发送输入输出io请求后,输入输出请求io操作被内核调用后立即返回给用户一个状态值,无需等到内核彻底完成输入输出io操作。而在本技术的方法实施例中,阻塞是指用户线程向管理器发起针对第一任务的输入输
出io请求后,管理器需要彻底完成用户线程发起的输入输出io请求操作才会返回到用户空间。
23.需要指出的是,输入输出io多路复用模型时建立在内核提供的多路分离函数select基础上的,使用select函数可以避免同步非阻塞输入输出io中轮询等待的问题。输入输出io多路复用模型采用经典的reactor设计模式。reactor是一种事件驱动机制,逆置了事件处理流程。应用程序需要提供相应的接口并注册到reactor上。当事件发生时,reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。
24.具体的,在本技术提供的一种应用进程的输入输出io多路复用方法实施例中,应用进程的用户线程向管理器或者内核发起输入输出io请求,记为第一任务。管理器或者内核通过远程过程调用节点处理用户线程发起的输入输出io请求时,也就是当管理器或者内核选择远程过程调用节点处理第一任务时,用户线程无需等待管理器或者内核对第一任务的处理结果,在注册事件处理器后,也就是在发起输入输出io请求后,继续执行其余操作,即第二任务。
25.需要指出的是,在方法本实施例中,上述的事件处理器(event handler)指的是确定控件如何响应事件的事件过程,它是异步(asynchronous)执行、处理程序或事件中输入的回调函数。
26.进一步的,当用户线程处理第二任务时,管理器或者内核会根据通过一个确定的周期,此处记为第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果。可以理解的是,第一任务的处理结果会出现两种情况,已完成或者未完成,即可读取或者不可读取。具体的,当管理器或者内核已经完成用户线程发出的输入输出io请求时,第一任务的处理结果为可读取状态。管理器会通知用户线程从第二任务返回第一任务的操作状态,使用户线程可以继续执行第一任务的后续操作,即对第一任务的处理结果进行输入输出io。当管理器或者内核未完成用户线程发出的输入输出io请求时,第一任务的处理结果为不可读取状态。管理器继续根据第二轮询周期,向远程过程调用节点定期查询第一任务的处理结果,直到查询到的处理结果为可读取状态。
27.可以理解的是,在上述方法实施例中所述的轮询(polling)是一种中央处理器(central processing unit,cpu)决策如何提供周边设备服务的方式,又称程控输入输出(programmed io)。轮询法的概念是:由中央处理器cpu定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。
28.具体的,在本技术提供的方法实施例中,通过以下方式确定所述第二轮询周期。第一轮询周期为已知值。根据已经确定的第一轮询周期进行步进,形成新的轮询周期,此处记为中间轮询周期。管理器根据所述第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态。当第一任务的处理结果为可读取状态时,管理器向用户线程发出返回第一任务通知的同时,计算根据中间轮询周期轮询的次数,记为中间轮询次数。当计算出的中间轮询次数满足一定的条件时,中间轮询周期将被确定为第二轮询周期。
29.请参照图3,进一步的,所述中间轮询次数满足的预设条件为:s351:通过将中间轮询次数与预设次数进行比较,以确定中间轮询周期递进方向;s352:当所述中间轮询次数大于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递增。
30.进一步的,所述中间轮询次数满足的预设条件为:s353:当所述中间轮询次数小于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递减。
31.可以理解的是,在本技术的方法实施例中,中间轮询次数不止一次,因此中间轮询周期的值也不是一成不变的,它会根据一定的规律产生递进的变化。具体的,中间轮询周期是由第一轮询周期步进形成的。因此,中间轮询周期的递进根据第一轮询周期的步进规律而定。本技术将提供一个预设的次数与管理器计算得出的中间轮询次数进行对比,根据对比的结果确定中间轮询周期是递增还是递减。当所述中间轮询次数大于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递增。当所述中间轮询次数小于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递减。本实施例通过这样的方式来动态调整轮询周期,保证不会因为周期太短而降低系统性能,也不会因为周期太长而影响处理时间,使轮询周期可以平滑变换。
32.进一步的,所述中间轮询周期具有最大周期值(tmax)和最小周期值(tmin);所述第一轮询周期的步进表示为:中间轮询周期每次改变的值(tstep)不得大于最大周期值tmax与最小周期值tmin的差值。
33.可以理解的是,为了保证系统的响应速度和性能,本技术提供的方法实施例限定了中间轮询周期的范围。中间轮询周期在预设的最大周期值tmax和最小周期值tmin范围内进行递进变化,以保证周期值不会过大而影响到系统的处理速度,也不会过小而影响系统的性能。具体的,中间轮询周期根据第一轮询周期的步进而递进,表示为:中间轮询周期每次改变的值tstep小于或者等于最大轮询周期值tmax与最小轮询周期值tmin的差值。中间轮询周期在这样的递进方式下可以平滑地变化,保证哎预设次数之间就能完成轮询任务。同时,将中间轮询周期限定在一个范围内进行变化,以防止周期超过预期值而对系统产生影响。
34.进一步的,所述管理器完成一次第一任务的处理后,向远程过程调用节点查询第一任务的处理结果为可读状态;根据已经确定的第二轮询周期,管理器在处理下一次第一任务时,重新计算中间轮询周期。
35.可以理解的是,为了最大程度减少每次用户线程向管理器发起第一任务请求后的阻塞时间,每次管理器完成用户线程针对第一任务的请求后,也就是轮询结束时,已经确定的中间轮询周期只针对此次任务。管理器在处理下一次用户线程发起的新的输入输出io请求,即用户线程发起新的第一任务时,中间轮询周期需要重新计算,以保证每次用户线程发起的第一任务都具有针对本次请求最新的中间轮询周期,使用户线程能在最短的时间内收到管理器的第一任务返回通知并快速切回针对第一任务的后续操作状态。
36.进一步的,所述管理器在处理下一次第一任务时,中间轮询周期的算法表示为:y=a*x b*(1-a)式中,y表示最新一次的中间轮询周期,x表示中间轮询周期的历史值,a表示平滑系数,b表示最新一次的中间轮询次数。
37.进一步的,所述平滑系数用来平衡中间轮询周期历史值和最新值的比重,其取值范围在0与1之间。
38.可以理解的是,在本技术提供的方法实施例中,管理器通过定期查询的方法向用户线程进行反馈。定期查询的周期间隔可以根据管理器的反馈来逐步接近最优值。在本实施例中,当管理器定期查询的次数,即中间轮询次数尽量少时,定期查询的周期间隔最接近最优值。为了能最大程度减少每次用户线程阻塞的时间,每次中间轮询周期都要随最新一次用户线程发起的第一任务而重新计算。因此,最新的中间轮询周期会随中间轮询周期的历史值而改变。具体的,最新一次的中间轮询周期等于中间轮询周期的历史值乘以平滑系数加最新一次中间轮询次数乘以1和此平滑系数两者的差。通过这个算法求得的最新的中间轮询周期,可以防止抖动,尽可能地减少用户线程的阻塞。
39.进一步的,所述预设次数为2次。
40.具体的,本技术提供的方法实施例将与中间轮询次数比较的预设次数设置为2次,以保证中间轮询周期平滑递进的同时,能在2次之间就完成轮询任务。当中间轮询次数大于2次时,中间轮询周期根据中间轮询周期每次改变的值tstep,在最大轮询周期值tmax和最小轮询周期值tmin范围内递增。当中间轮询次数小于2次时,中间轮询周期根据中间轮询周期每次改变的值tstep,在最大轮询周期值tmax和最小轮询周期值tmin范围内递减。
41.进一步的,所述第一任务处于未完成时,用户线程的应用程序编辑接口为阻塞状态,管理器向远程过程调用节点查询第一任务的处理结果为不可读状态,用户线程将执行第二任务;管理器通过定期查询第一任务的处理结果的方式,判断是否通知用户线程返回第一任务;当第一任务完成后,管理器向远程过程调用节点查询第一任务的处理结果为可读状态,快速通知用户线程返回第一任务,此时用户线程的应用程序编辑接口已经处于疏通状态,允许用户线程继续执行第一任务的输入输出请求,即可将应用程序编辑接口的超时设置为0。
42.可以理解的是,在本技术提供的方法实施例中,所述的应用程序编辑接口(application programming interface,api),是软件系统不同组成部分衔接的约定。其主要目的是开发人员在无需访问源码,或理解内部工作机制的细节的情况下,提供应用程序与开发人员以访问一组例程的能力。应用程序编辑接口api是一种抽象的形容,其本质也就是程序库提供给应用程序调用使用的代码。具体的,应用程序编辑接口api在本技术提供的方法实施例中指的是用户线程注册的“回调函数”,当管理器或者内核完成用户线程的输入输出io请求后将调用用户线程注册的回调函数。
43.具体的,当用户线程向管理器发起针对第一任务的输入输出io请求后,用户线程继续执行第二任务。管理器开始处理用户线程发起的第一任务。当管理器未完成第一任务的处理时,用户线程的应用程序编辑接口处于阻塞状态,管理器向远程过程调用节点查询第一任务的处理结果为不可读。此时用户线程只能等待管理器继续向远程过程调用节点查询第一任务的处理结果,直到第一任务处理完成。或者用户线程异步执行第二任务,直到管理器向远程过程调用节点查询第一任务的处理结果为可读后通知用户线程返回第一任务。管理器在处理第一任务的过程中,会定期向远程过程调用节点查询第一任务的处理结果,以便在第一任务完成时能以最快的时间通知用户线程。当管理器完成第一任务的处理后,用户线程的应用程序编辑接口已经处于疏通状态,管理器向远程过程调用节点查询第一任
务的处理结果为可读。此时管理器通知用户线程快速返回第一任务的操作状态。通过这样的方式,将会大幅度减少用户线程的阻塞时间,应用程序编辑接口也因此将很少甚至不会出现超时,即可将应用程序编辑接口的超时设置为0。
44.需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,有语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
45.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
技术特征:
1.一种应用进程的输入输出多路复用方法,其特征在于,包括:应用进程的用户线程向管理器发起针对第一任务的输入输出请求;管理器选择远程过程调用节点对第一任务进行处理;在用户线程处理第二任务时,管理器根据确定的第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;当第一任务的处理结果处于可读取状态时,管理器通知用户线程进行输入输出操作;用户线程进行对第一任务的处理结果进行输入输出;其中,所述第二轮询周期根据以下方式确定:确定第一轮询周期;第一轮询周期进行步进,形成中间轮询周期;管理器根据所述第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;当第一任务的处理结果处于可读取状态时,管理器计算中间轮询次数;当中间轮询次数满足预设条件时,将中间轮询周期确定为第二轮询周期。2.如权利要求1所述的应用进程的输入输出多路复用方法,其特征在于,所述中间轮询次数满足的预设条件为:通过将中间轮询次数与预设次数进行比较,以确定中间轮询周期递进方向;当所述中间轮询次数大于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递增。3.如权利要求2所述的应用进程的输入输出多路复用方法,其特征在于:通过将中间轮询次数与预设次数进行比较,以确定中间轮询周期递进方向;当所述中间轮询次数小于预设次数时,中间轮询周期根据所述第一轮询周期的步进规律在周期预设范围内递减。4.如权利要求2所述的应用进程的输入输出多路复用方法,其特征在于:所述中间轮询周期具有最大周期值和最小周期值;所述第一轮询周期的步进表示为:中间轮询周期每次改变的值不得大于最大周期值与最小周期值的差值。5.如权利要求1所述的应用进程的输入输出多路复用方法,其特征在于,所述管理器完成一次第一任务的处理后,向远程过程调用节点查询第一任务的处理结果为可读状态;根据已经确定的第二轮询周期,管理器在处理下一次第一任务时,重新计算中间轮询周期。6.如权利要求5所述的应用进程的输入输出多路复用方法,其特征在于,所述管理器在处理下一次第一任务时,中间轮询周期的算法表示为:y=a*x b*(1-a)式中,y表示最新一次的中间轮询周期,x表示中间轮询周期的历史值,a表示平滑系数,b表示最新一次的中间轮询次数。7.如权利要求6所述的应用进程的输入输出多路复用方法,其特征在于,所述平滑系数用来平衡中间轮询周期历史值和最新值的比重,其取值范围在0与1之间。8.如权利要求2所述的应用进程的输入输出多路复用方法,其特征在于,所述预设次数
为2次。9.如权利要求1所述的应用进程的输入输出多路复用方法,其特征在于,所述第一任务处于未完成时,用户线程的应用程序编辑接口为阻塞状态,管理器向远程过程调用节点查询第一任务的处理结果为不可读状态,用户线程将执行第二任务;管理器通过定期查询第一任务的处理结果的方式,判断是否通知用户线程返回第一任务;当第一任务完成后,管理器向远程过程调用节点查询第一任务的处理结果为可读状态,快速通知用户线程返回第一任务,此时用户线程的应用程序编辑接口已经处于疏通状态,允许用户线程继续执行第一任务的输入输出请求,即可将应用程序编辑接口的超时设置为0。
技术总结
本申请提供一种应用进程的输入输出多路复用方法,包括:应用进程的用户线程向管理器发起针对第一任务的输入输出请求;管理器选择远程过程调用节点对第一任务进行处理;在用户线程处理第二任务时,管理器根据确定的第二轮询周期,定期向远程过程调用节点查询第一任务的处理结果是否处于可读取状态;当第一任务的处理结果处于可读取状态时,管理器通知用户线程进行输入输出操作;用户线程进行对第一任务的处理结果进行输入输出。通过这种输入输出多路复用的方式,使用户线程在发出第一任务请求后执行第二任务,防止用户线程阻塞;通过管理器定期查询的方式,用户线程可以在执行第二任务时快速返回第一任务。这样,减少了阻塞时间,提高了系统性能。提高了系统性能。提高了系统性能。
技术研发人员:余冠彬
受保护的技术使用者:广州世炬网络科技有限公司
技术研发日:2022.04.24
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-7120.html