无栈协程的实现方法、装置、设备及存储介质制造方法及图纸

技术编号:35060638 阅读:25 留言:0更新日期:2022-09-28 11:13
本申请公开了一种无栈协程的实现方法、装置、设备及存储介质,涉及计算机领域,该无栈协程的实现方法包括:获取无栈协程的源文件,源文件包括协程函数;采用语法分析器,提取协程函数包括的局部变量;将局部变量封装到堆的结构体中;为结构体分配结构体指针;将局部变量替换为结构体指针,得到源文件对应的目标文件。解决了无栈协程中无法使用局部变量的问题,提高了无栈协程的开发效率。提高了无栈协程的开发效率。提高了无栈协程的开发效率。

【技术实现步骤摘要】
无栈协程的实现方法、装置、设备及存储介质


[0001]本申请属于计算机领域,具体涉及一种无栈协程的实现方法、装置、设备及存储介质。

技术介绍

[0002]协程,又称为微线程,在执行的过程中,可以在中断当前的协程函数后去执行别的协程函数,再返回来继续执行该当前的协程函数。其中,协程包括无栈协程,即不使用栈和上下文切换来执行异步代码逻辑的机制。无栈协程是一种高效、简单的异步编程方式,它大大的提高了异步编程的效率,降低了异步编程的复杂度,使得代码更具有稳定性和可扩展性。但是无栈协程在协程挂起后(yield),协程函数的局部变量的内容会消失。
[0003]为了解决上述问题,目前,通常采用全局变量替代局部变量,但这种方法会导致协程函数不具有可重入性。因此,亟需一种新的无栈协程的实现方法。

技术实现思路

[0004]为了解决上述问题,即为了解决采用全局变量替代局部变量会导致协程函数不具有可重入性的问题,本申请提供了一种无栈协程的实现方法、装置、设备及存储介质。
[0005]第一方面,本申请提供了一种无栈协程的实现方法,包括:获取无栈协程的源文件,源文件包括协程函数;采用语法分析器,提取协程函数包括的局部变量;将局部变量封装到堆的结构体中;为结构体分配结构体指针;将局部变量替换为结构体指针,得到源文件对应的目标文件。
[0006]在上述无栈协程的实现方法的优选技术方案中,采用语法分析器,提取协程函数包括的局部变量,包括:采用语法分析器对源文件进行语法分析,根据协程函数的标识信息确定源文件中的协程函数;确定协程函数中的局部变量。
[0007]在上述无栈协程的实现方法的优选技术方案中,将局部变量封装到堆的结构体中之前,还包括:为结构体分配存储空间;基于存储空间的大小,创建结构体。
[0008]在上述无栈协程的实现方法的优选技术方案中,为结构体分配存储空间,包括:创建结构体的空间分配语句;根据空间分配语句,为结构体分配存储空间。
[0009]在上述无栈协程的实现方法的优选技术方案中,为结构体分配结构体指针,包括:创建结构体指针的获取语句;根据获取语句,为结构体分配结构体指针。
[0010]在上述无栈协程的实现方法的优选技术方案中,得到源文件对应的目标文件之后,还包括:确定目标文件是否符合无栈协程的使用规则,使用规则包括协程函数不允许使用局部变量;在目标文件符合使用规则的情况下,输出目标文件。
[0011]第二方面,本申请提供了一种无栈协程的实现装置,包括:获取模块,用于获取无栈协程的源文件,源文件包括协程函数;提取模块,用于采用语法分析器,提取协程函数包括的局部变量;封装模块,用于将局部变量封装到堆的结构体中;分配模块,用于为结构体分配结构体指针;替换模块,用于将局部变量替换为结构体指针,得到源文件对应的目标文
件。
[0012]第三方面,本申请提供了一种电子设备,包括:处理器,以及与处理器通信连接的存储器;存储器存储计算机执行指令;处理器执行存储器存储的计算机执行指令,以实现如第一方面的无栈协程的实现方法的技术方案。
[0013]第四方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现第一方面的无栈协程的实现方法的技术方案。
[0014]第五方面,本申请提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现如第一方面的无栈协程的实现方法的技术方案。
[0015]本申请提供的无栈协程的实现方法、装置、设备及存储介质,通过采用语法分析器提取源文件中的协程函数的局部变量,然后将局部变量封装到堆的结构体中,这样就可以使用结构体指针来替换协程函数的局部变量,因此,避免了无栈协程中无法使用局部变量的问题,在保证用户可以更容易写出安全的无栈协程代码的同时,保证协程函数的可重入性,提高无栈协程的开发效率和稳定性。
附图说明
[0016]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
[0017]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0018]图1为本申请实施例提供的无栈协程的实现方法的一种应用场景示意图;
[0019]图2为本申请实施例提供的无栈协程的实现方法的流程图;
[0020]图3为本申请实施例提供的无栈协程的实现装置的结构示意图;
[0021]图4为本申请实施例提供的电子设备的结构示意图。
具体实施方式
[0022]为了使本
的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0023]需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0024]下面首先对本申请中涉及的名词进行解释。
[0025]无栈协程:是一种高效,简单的异步编程方式。它大大的提高了异步编程的效率,降低了异步编程的复杂度,使得代码更具有稳定性和可扩展性。
[0026]可重入性:具有可重入性的函数必须满足以下三个条件:(1)可以在执行的过程中可以被打断;(2)被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered);(3)再次调用执行完之后,被打断的上次调用可以继续恢复执行,并正确执行。
[0027]堆(Heap):是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。
[0028]
技术介绍
中提到的相关技术,至少存在以下技术问题:
[0029]无栈协程虽然可以提高异步编程的效率,降低异步编程的复杂度,但是无栈协程存在协程挂起后(yield),局部变量的内容消失的问题。业务逻辑必须使用yield之前的上下文信息,若无法使用局部变量,则需要开发人员修改设计,将上下文信息保存到外部结构中,并通过参数传递的方式传递进来,而这种方式增加了开发人员的负担,并且并非所有的场景都可以使用;并且开发人本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种无栈协程的实现方法,其特征在于,包括:获取无栈协程的源文件,所述源文件包括协程函数;采用语法分析器,提取所述协程函数包括的局部变量;将所述局部变量封装到堆的结构体中;为所述结构体分配结构体指针;将所述局部变量替换为所述结构体指针,得到所述源文件对应的目标文件。2.根据权利要求1所述的无栈协程的实现方法,其特征在于,所述采用语法分析器,提取所述协程函数包括的局部变量,包括:采用所述语法分析器对所述源文件进行语法分析,根据协程函数的标识信息确定所述源文件中的协程函数;确定所述协程函数中的局部变量。3.根据权利要求1所述的无栈协程的实现方法,其特征在于,所述将所述局部变量封装到堆的结构体中之前,还包括:为所述结构体分配存储空间;基于所述存储空间的大小,创建所述结构体。4.根据权利要求3所述的无栈协程的实现方法,其特征在于,所述为所述结构体分配存储空间,包括:创建所述结构体的空间分配语句;根据所述空间分配语句,为所述结构体分配存储空间。5.根据权利要求3所述的无栈协程的实现方法,其特征在于,所述为所述结构体分配结构体指针,包括:创建所述结构体指针的获取语句;根据所述获取语句,为所述结构体分配所述结构体指针。6.根据权利要求1至5任一项所述的无栈协程的实现方法,其特征在于...

【专利技术属性】
技术研发人员:肖良
申请(专利权)人:海尔智家股份有限公司
类型:发明
国别省市:

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

1