An embodiment of the invention provides a co process implementation method and device, which includes: the target memory space required by the function call stack corresponding to the co process based on the script language bytecode of the co range corresponding function; in which a co process corresponds to a function call stack; the function call stack is allocated with the target memory. The independent memory space corresponding to the space; in which the memory space of the function call stack corresponding to the co process is not interfered with each other; in the independent memory space, the contents of each structure of the function call stack are filled; the function call stack is preprocessed before the co execution of the function call stack; the execution state of the virtual machine is pointed to the written function. A number call stack to perform the described co process. Further, the embodiment of the invention can also realize the switching of the association. The embodiment of the invention can improve the efficiency of the realization of the association.
【技术实现步骤摘要】
一种协程实现方法及装置
本专利技术涉及程序
,具体涉及一种协程实现方法及装置。
技术介绍
协程作为用户态的一种可重入的子程序在计算机程序、数据处理过程中应用广泛;目前集成协程能力的框架一般通过Generator(迭代器)提供的函数重入能力实现,即将一个Generator作为一个协程,并在应用层面实现协程的调度器。然而,基于Generator实现协程,必须采用Generator的yield关键字(yield代表一种控制权的放弃、转移);一旦协程对应的函数采用了yield关键字,函数的上层调用都必须采用yield去调用子函数,且同时要定义yield关键字的函数调用和函数返回语义;可见,基于Generator,采用yield关键字实现协程,会带入yield关键字本身存在的实现较复杂的问题,导致协程的实现较为复杂、麻烦,降低了协程的实现效率。
技术实现思路
有鉴于此,本专利技术实施例提供一种协程实现方法及装置,以降低协程实现的复杂度,提升协程实现的效率。为实现上述目的,本专利技术实施例提供如下技术方案:一种协程实现方法,包括:根据协程对应函数的脚本语言字节码,确定协程对应的函数调用栈所需的目标内存空间;其中,一个协程对应一个函数调用栈;为所述函数调用栈分配与所述目标内存空间相应的独立内存空间;其中,各协程对应的函数调用栈的内存空间互不干扰;在所述独立内存空间中,为所述函数调用栈的各结构体填充内容;对所述函数调用栈进行协程执行前的预处理;将虚拟机的执行状态指向所述函数调用栈,以执行所述协程。本专利技术实施例还提供一种协程实现装置,包括:目标内存空间确定模块,用于根 ...
【技术保护点】
一种协程实现方法,其特征在于,包括:根据协程对应函数的脚本语言字节码,确定协程对应的函数调用栈所需的目标内存空间;其中,一个协程对应一个函数调用栈;为所述函数调用栈分配与所述目标内存空间相应的独立内存空间;其中,各协程对应的函数调用栈的内存空间互不干扰;在所述独立内存空间中,为所述函数调用栈的各结构体填充内容;对所述函数调用栈进行协程执行前的预处理;将虚拟机的执行状态指向所述函数调用栈,以执行所述协程。
【技术特征摘要】
1.一种协程实现方法,其特征在于,包括:根据协程对应函数的脚本语言字节码,确定协程对应的函数调用栈所需的目标内存空间;其中,一个协程对应一个函数调用栈;为所述函数调用栈分配与所述目标内存空间相应的独立内存空间;其中,各协程对应的函数调用栈的内存空间互不干扰;在所述独立内存空间中,为所述函数调用栈的各结构体填充内容;对所述函数调用栈进行协程执行前的预处理;将虚拟机的执行状态指向所述函数调用栈,以执行所述协程。2.根据权利要求1所述的协程实现方法,其特征在于,所述函数调用栈包括:函数执行信息的结构体,函数变量信息的结构体,及函数调用信息的结构体;所述根据协程对应函数的脚本语言字节码,确定协程对应的函数调用栈所需的目标内存空间包括:根据协程对应函数的脚本语言字节码,计算所述函数调用栈的函数变量信息的结构体,及函数调用信息的结构体所需的内存空间;根据所述函数调用栈的函数执行信息的结构体,预设定的所需内存空间,及所确定的函数变量信息的结构体,和函数调用信息的结构体所需的内存空间,确定所述函数调用栈所需的目标内存空间。3.根据权利要求2所述的协程实现方法,其特征在于,所述函数执行信息的结构体包括:协程对应函数所调用的函数信息;所述函数调用栈通过关联指针指向上一次调用的函数调用栈的函数执行信息。4.根据权利要求2所述的协程实现方法,其特征在于,所述对所述函数调用栈进行协程执行前的预处理包括:将所述函数调用栈的函数执行信息的结构体进行初始化;初始化脚本语言字节码缓存;初始化This指针;更新协程信息。5.根据权利要求1-4任一项所述的协程实现方法,其特征在于,所述将虚拟机的执行状态指向所述函数调用栈,以执行所述协程包括:确定函数位置指针当前指向的函数调用栈;其中,所述函数位置指针在各个函数调用栈中,全局维护虚拟机当前执行的函数调用栈,并指向该函数调用栈;将虚拟机的执行状态,指向所述函数位置指针所指向的函数调用栈,以执行所述协程。6.根据权利要求1所述的协程实现方法,其特征在于,所述方法还包括:在执行协程时,创建当前执行状态的存档...
【专利技术属性】
技术研发人员:朱新宇,司超,王广超,袁易之,杨锡坤,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。