[发明专利]一种协程实现方法、终端设备及存储介质有效
申请号: | 201711251988.9 | 申请日: | 2017-12-01 |
公开(公告)号: | CN108021449B | 公开(公告)日: | 2020-07-31 |
发明(设计)人: | 陈腾跃;孟方方;叶青;梁煜麓;罗佳 | 申请(专利权)人: | 厦门安胜网络科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F9/48 |
代理公司: | 厦门市精诚新创知识产权代理有限公司 35218 | 代理人: | 方惠春 |
地址: | 361000 福建省厦门市*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 方法 终端设备 存储 介质 | ||
1.一种协程实现方法,其特征在于:所述协程包括主协程和工作协程两类,所述工作协程按照其栈方法分别设定为使用共享栈的工作协程和使用独立栈的工作协程,具体实现步骤如下:
S10:在线程里创建主协程,进入S20;
S20:主协程等待响应异步事件,直至当异步事件发生时,将主协程挂起,进入S30;
S30:读取对应工作协程的协程信息块,根据协程信息块中的栈方法创建对应的工作协程,进入S40;
其中:所述工作协程根据其栈方法的类型有三种创建方式:
方式1:当工作协程为新的工作协程,即之前没创建过的工作协程时,设置工作协程的栈相关寄存器使用工作协程共享栈;
方式2:当工作协程为使用共享栈方法的已存在工作协程时,从堆内存中拷贝该工作协程栈数据至共享栈,恢复工作协程寄存器数据,设置栈相关寄存器使用工作协程共享栈;
方式3:当工作协程为使用独立栈方法的已存在工作协程时,栈相关寄存器使用该工作协程独立运行栈,恢复工作协程寄存器数据;
S40:当工作协程处理完成后,切换回主协程,之后返回S20;
其中:所述工作协程切换回主协程根据工作协程的栈方法的类型有三种方式:
方式1:工作协程不需要被保存的情况下切换回主协程时,清理协程信息块,恢复主协程寄存器数据,设置栈相关寄存器使用主协程独立运行栈;
方式2:工作协程使用共享栈方式被挂起切换至主协程时,计算该工作协程所真实使用的共享栈大小,分配同等大小堆内存块,拷贝工作协程共享栈中的数据至分配的堆内存中,保存工作协程寄存器数据,恢复主协程寄存器数据,设置栈相关寄存器使用主协程独立栈;
方式3:工作协程使用独立栈方式被挂起切换至主协程时,分配独立栈对应的堆内存块,标记该堆内存块为该工作协程独立栈,拷贝工作协程共享栈中的数据至新分配的堆内存块中,保存工作协程寄存器数据,恢复主协程寄存器数据,设置栈相关寄存器使用主协程独立栈。
2.根据权利要求1所述的协程实现方法,其特征在于:所述主协程在初始化时创建,只负责响应异步事件,不涉及事件的具体处理,拥有完全的独立栈,栈中数据不需要拷贝。
3.根据权利要求1所述的协程实现方法,其特征在于:步骤S10中所述创建主协程包括为主协程分配独立的寄存器上下文和独立的栈空间,同时分配用于共享工作协程的工作协程共享栈和堆空间。
4.根据权利要求3所述的协程实现方法,其特征在于:所述堆空间用来保存协程信息块,包括独立栈的栈地址、协程类型,以及包括共享栈的栈地址、协程类型。
5.根据权利要求1所述的协程实现方法,其特征在于:所述工作协程按照其栈方法的设定方式设定默认的工作协程使用共享栈,设定需要反复被挂起的工作协程使用独立栈。
6.根据权利要求1所述的协程实现方法,其特征在于:所述协程信息块内部存储有工作协程对应的栈方法的类型。
7.一种协程实现终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1~6所述方法的步骤。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1~6所述方法的步骤。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于厦门安胜网络科技有限公司,未经厦门安胜网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711251988.9/1.html,转载请声明来源钻瓜专利网。