System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于异步事件回调的协程调度模型与方法技术_技高网

一种基于异步事件回调的协程调度模型与方法技术

技术编号:40943090 阅读:4 留言:0更新日期:2024-04-18 15:00
本发明专利技术公开了一种基于异步事件回调的协程调度模型与方法,其涉及软件开发技术领域,旨在解决同步代码处理并发任务时,通常采用多线程和多进程的方式,会引入大量不必要的线程切换开销,从而导致系统吞吐量低、处理时延高,通常不会应用于要求高并发、低时延的软件系统的问题,其技术方案要点是S1:设置协程基本结构;S2:协程与异步任务的协作;S3:协程的相互调用;S4:协程的多路复用;S5:协程的生命周期管理,通过反向引用结合引用计数的方式实现协程生命周期管理。达到了提高了软件的迭代速度和质量保证和具有更好的代码可读性与可维护性的效果。

【技术实现步骤摘要】

本专利技术涉及软件开发,尤其是涉及一种基于异步事件回调的协程调度模型与方法


技术介绍

1、在传统软件开发中,同步(sync)和异步(async)是两种常用的且不同的编程开发模型,并广泛应用于各类软件系统开发中。

2、同步模型代码至上而下线性执行,遇到需要等待io或等待其他耗时较长的任务时,线程阻塞等待至相关函数调用,待请求完成后,再继续往下运行,同步模型具有逻辑清晰、开发便捷、易维护的特点。

3、异步模型采用异步事件通知的机制实现业务逻辑,通常采用“请求—回调”的方式处理各个请求,当请求io或长耗时任务时,线程发起请求后立即返回,可以往下执行,当io或任务完成后,通过回调的方式通知主线程任务已经完成,再这种模型下,各个回调函数被异步事件触发调用,导致业务逻辑线被打乱分散再各个异步事件回调函数中,造成逻辑不清晰、开发效率低、不易维护得特点,但是在处理并发任务时,结合多路复用、异步io、reactor等技术,可以单线程处理多个任务,有效避免了线程切换等与业务逻辑不相干的开销,具有吞吐量高,处理时延低的特点,常用于有高并发、低时延需求的软件系统中。

4、协程(coroutine),结合了同步和异步开发模式各自的优点,采用了开发者可控的“主动让出—适时唤醒”机制,让开发者可以控制同步任务的换入换出,在减少了大多数的任务切换开销,同时采用同步编码的方式逻辑也较为清晰,便于维护。而在使用异步事件驱动的高并发、低延时项目中,对于非核心业务流程,使用协程实现,能在保证性能不会极具恶化的情况下,实现sync on async的方式,大大增加了代码的可读性、易维护性,从而提升效率。

5、上述中的现有技术方案存在以下缺陷:同步代码处理并发任务时,通常采用多线程和多进程的方式,会引入大量不必要的线程切换开销,从而导致系统吞吐量低、处理时延高,通常不会应用于要求高并发、低时延的软件系统。


技术实现思路

1、本专利技术的目的是提供一种实现大规模流式数据的过滤去重功能,同时要满足低延时,达到后续进行数据营销的业务需要的基于异步事件回调的协程调度模型与方法。

2、为实现上述目的,本专利技术提供了如下技术方案:

3、一种基于异步事件回调的协程调度模型与方法,其方法如下:

4、s1:设置协程基本结构,构建协程模型,将协程除了自身的调用栈管理之外,设置suspend、resume两种语义用于协程的上下文切换,且每个协程实例暴露协程入口提供被其他协程调用的能力,同时提供协程完成回调,在协程执行完成之后通过回调通知关心协程运行情况的实体;

5、s2:协程与异步任务的协作,设置后的协程在异步事件框架下,通常遵循“请求—回调”的方式运行特定异步任务,通过绑定resume语义到异步任务回调的方式唤醒协程,并通过session id确定上下文一致;

6、s3:协程的相互调用,协程间相互调用采用栈式结构维护调用关系,协程间相互调用采用resume绑定被调用者callback的方式组织成链式调用结构;

7、s4:协程的多路复用,通过collector实现协程的多路复用,引入collector实现多个任务的等待;

8、s5:协程的生命周期管理,通过反向引用结合引用计数的方式实现协程生命周期管理。

9、进一步地,所述s1中协程模型内部包括有协程实例和collector,所述协程实例为具体运行的协程,协程支持suspend与resume语义并提供callback注册。

10、进一步地,所述协程实例用于通过调用session实现上下文切换管理,各个协程间通过年时的方式进行管理,所述collector用于通过请求、完成队列,管理协程的多路等待与返回结果收集。

11、所述s2协程与异步任务的协作中当协程需要调用io或长耗时任务时,首先发起异步请求,并在回调中绑定本协程的resume方法,在请求发起后立即调用suspend将协程让出。

12、进一步地,所述s2协程与异步任务的协作中当异步任务执行完成之后,通过调用之前绑定的回调函数执行协程的resume语义将协程恢复。

13、进一步地,所述s2协程与异步任务的协作中为了避免协程被错误的唤醒,在请求发起时为协程生成唯一session id,并在通过在协程恢复时校验session id的方式匹配协程上下文。

14、进一步地,所述s3中协程的相互调用中一个协程调用另外一个协程的时,在被调用协程中注册完成回调以调用自身的resume,再通过suspend语义让自身的执行。

15、进一步地,所述s3中协程的相互调用中被调用协程执行结束后,释放自身资源,并通过完成回调的方式唤醒调用者,且多个协程间通过堆叠,构成栈的结构。

16、进一步地,所述s4中协程的多路复用当一个协程需要等待多个任务时,通过collector的call语义调用对应协程,再通过collector提供的wait语义进行等待,collector内部通过完成队列和请求队列对被调用的协程进行上下文管理。

17、进一步地,所述s5中协程的生命周期管理的所有调用栈上的协程,通过引用计数的方式管理生命周期,其中由被调用者的callback上下文持有调用者的引用,整个调用栈上看是从栈顶到栈底的引用链条,则可以确保在唤醒调用者时调用者实例未被释放。

18、进一步地,所述s5中协程的生命周期管理在多路复用的场景下,由被调用者持有collector的引用,collector保证在完成所有的请求后再释放对调用者的引用,即可保证整个协程调用栈上所有协程均被单向引用。

19、综上所述,本专利技术的有益技术效果为:

20、1、本专利技术意在异步框架为基础的软件系统中引入协程,该方式在异步框架的软件系统中,利用异步回调绑定的方式调度协程,可以在兼容现有异步(async)代码的情况下实现同步(sync)编码,这种sync on async编码方式能在原生异步框架0修改的基础上引入协程,提高了软件的迭代速度和质量保证;

21、2、本专利技术可灵活的,无侵入性的结合各类异步框架如:libev、libevent、spdk等,异步结构的代码中零修改引入同步编程模式,实现sync on async,方便整体进行协程调度;

22、3、本专利技术协程无专用调度模块,方便灵活结合现有异步框架,且相比异步软件模型,具有更好的代码可读性与可维护性。

本文档来自技高网...

【技术保护点】

1.一种基于异步事件回调的协程调度模型与方法,其特征在于:其方法如下:

2.根据权利要求1所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S1中协程模型内部包括有协程实例和Collector,所述协程实例为具体运行的协程,协程支持Suspend与resume语义并提供callback注册。

3.根据权利要求2所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述协程实例用于通过调用session实现上下文切换管理,各个协程间通过年时的方式进行管理,所述Collector用于通过请求、完成队列,管理协程的多路等待与返回结果收集。

4.根据权利要求3所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S2协程与异步任务的协作中当协程需要调用IO或长耗时任务时,首先发起异步请求,并在回调中绑定本协程的Resume方法,在请求发起后立即调用Suspend将协程让出。

5.根据权利要求4所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S2协程与异步任务的协作中当异步任务执行完成之后,通过调用之前绑定的回调函数执行协程的Resume语义将协程恢复。

6.根据权利要求5所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S2协程与异步任务的协作中为了避免协程被错误的唤醒,在请求发起时为协程生成唯一Session ID,并在通过在协程恢复时校验Session ID的方式匹配协程上下文。

7.根据权利要求6所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S3中协程的相互调用中一个协程调用另外一个协程的时,在被调用协程中注册完成回调以调用自身的Resume,再通过Suspend语义让自身的执行。

8.根据权利要求7所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S3中协程的相互调用中被调用协程执行结束后,释放自身资源,并通过完成回调的方式唤醒调用者,且多个协程间通过堆叠,构成栈的结构。

9.根据权利要求8所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S4中协程的多路复用当一个协程需要等待多个任务时,通过Collector的Call语义调用对应协程,再通过Collector提供的Wait语义进行等待,Collector内部通过完成队列和请求队列对被调用的协程进行上下文管理。

10.根据权利要求9所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S5中协程的生命周期管理的所有调用栈上的协程,通过引用计数的方式管理生命周期,其中由被调用者的Callback上下文持有调用者的引用,整个调用栈上看是从栈顶到栈底的引用链条,则可以确保在唤醒调用者时调用者实例未被释放。

11.根据权利要求10所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述S5中协程的生命周期管理在多路复用的场景下,由被调用者持有Collector的引用,Collector保证在完成所有的请求后再释放对调用者的引用,即可保证整个协程调用栈上所有协程均被单向引用。

...

【技术特征摘要】

1.一种基于异步事件回调的协程调度模型与方法,其特征在于:其方法如下:

2.根据权利要求1所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述s1中协程模型内部包括有协程实例和collector,所述协程实例为具体运行的协程,协程支持suspend与resume语义并提供callback注册。

3.根据权利要求2所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述协程实例用于通过调用session实现上下文切换管理,各个协程间通过年时的方式进行管理,所述collector用于通过请求、完成队列,管理协程的多路等待与返回结果收集。

4.根据权利要求3所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述s2协程与异步任务的协作中当协程需要调用io或长耗时任务时,首先发起异步请求,并在回调中绑定本协程的resume方法,在请求发起后立即调用suspend将协程让出。

5.根据权利要求4所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述s2协程与异步任务的协作中当异步任务执行完成之后,通过调用之前绑定的回调函数执行协程的resume语义将协程恢复。

6.根据权利要求5所述的一种基于异步事件回调的协程调度模型与方法,其特征在于:所述s2协程与异步任务的协作中为了避免协程被错误的唤醒,在请求发起时为协程生成唯一session id,并在通过在协程恢复时校验session id的方式匹配协程上下文。

7.根据权利要求6所述的...

【专利技术属性】
技术研发人员:陈阳
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1