一种基于协程的调度处理方法及系统技术方案

技术编号:27311271 阅读:30 留言:0更新日期:2021-02-10 09:34
本发明专利技术公开了一种基于协程的调度处理方法及系统,其中调度方法包括:步骤S1,于用户态创建至少一个协程并进行缓存;步骤S2,于用户态导入至少一个待运行程序,待运行程序包括多个指令和/或数据,对应至少一个协程;步骤S3,于用户态创建至少一个虚拟处理单元,用于运行协程以执行对应的指令和/或数据;步骤S4,协程于虚拟处理单元中运行完毕,释放对应的处理资源。通过本技术方案,提供了一种用户态的协程调度方案,使用协程模型代替线程模型能够大大提升于各个应用场景中的调度性能,同时实现了协程模型在Java等平台的设计及应用。协程模型在Java等平台的设计及应用。协程模型在Java等平台的设计及应用。

【技术实现步骤摘要】
一种基于协程的调度处理方法及系统


[0001]本专利技术涉及用户态调度
,尤其涉及一种基于协程的调度处理方法及系统。

技术介绍

[0002]协程作为一种类似于线程的轻量级调度单位,支持纯用户态工作模式,且调度简单快速且高效;在很多应用场景,相较于传统的线程调度模型具有更强的吸引力:
[0003]其一在于调度效率:线程相较于进程,共享了数据和代码,在调度上省去了很多内存的切换工作,因此更加高效快速;但线程的实现仍然脱离不了内核的支持(例如posix线程库的实现采用了内核线程的1:1模型),在线程调度的时候还是进行用户态和核心态的切换;而协程在具备了线程原有的所有优势之外,其最大优势在于它完全属于用户态的范畴,协程的切换对内核来说完全无法感知,因此舍去了繁重的用户态核心态的切换工作,使得任务的调度效率更上一层楼。
[0004]其二在于锁机制:同一进程中的不同线程虽然共享了代码和数据空间,但是在操作临界区数据的时候,多线程之间难免需要加入锁的机制,从而保证数据的一致性,锁机制的加入一定程度上限制了程序的执行效率;而多个协程由于运行在同一线程之上,由库程序自行控制调度,因此同一线程上运行的多个协程之间在临界区数据的访问上不存在竞争问题,从而大大提高了程序的运行效率。
[0005]其三在于对IO操作的处理上:IO操作通常作为阻塞事件需要线程挂起进行等待,浪费CPU资源,虽然后来出现的异步IO在一定程度上解决了CPU资源浪费的问题,但仍然无法完全消除;而协程在遇到IO操作的时候会阻塞当前协程,并同时调度其他可以运行的协程,在IO应答返回的时候重新调度原先阻塞的协程,能够不浪费CPU的资源。
[0006]其四在于系统的限制:传统的线程模型不管是哪种模型,最终需要和内核的基本调度单位进行1:1的对应关系,这个基本调度单位受制于操作系统内核的限制,因此一台服务器上可以提供执行的调度资源是极其有限的;而协程属于用户功能模块,不受操作系统底层影响,因此自然没有了之前的限制,只要物理内存允许便可以开设更多的调度单位;同时,协程作为线程下的更小颗粒度的调度单位,它共享了线程的所有数据,因此协程的数据结构只需要一些支持运行的寄存器就够了,从数据结构上它比线程小得多,这也让它能够创建比线程多得多的数量。
[0007]协程模型在以上几点中均大大改进了线程模型的性能,目前亟需一种基于协程的调度处理方法及系统。

技术实现思路

[0008]针对现有技术中存在的上述问题,现提供一种基于协程的调度处理方法及系统,具体技术方案如下所示:
[0009]一种基于协程的调度处理方法,包括:
[0010]步骤S1,于用户态创建至少一个协程并进行缓存;
[0011]步骤S2,于用户态导入至少一个待运行程序,待运行程序包括多个指令和/或数据,对应至少一个协程;
[0012]步骤S3,于用户态创建至少一个虚拟处理单元,用于运行协程以执行对应的指令和/或数据;
[0013]步骤S4,协程于虚拟处理单元中运行完毕,释放对应的处理资源。
[0014]优选的,该种调度处理方法,其中步骤S3还包括:
[0015]步骤S31,获取每个虚拟处理单元的可运行协程数;
[0016]步骤S32,根据可运行协程数分配协程至相应的虚拟处理单元并形成相应的运行队列。
[0017]优选的,该种调度处理方法,其中步骤S4还包括:
[0018]步骤S41,于协程的运行过程中,判断是否存在来自外部的第一用户指令并输出相应的第一判断结果;
[0019]步骤S42,根据第一判断结果,当存在第一用户指令时,于运行队列中选择一协程切换运行过程中的协程。
[0020]优选的,该种调度处理方法,其中步骤S4还包括:
[0021]步骤S4a,于协程的运行过程中,判断是否存在一阻塞事件并输出相应的第二判断结果;
[0022]步骤S4b,根据第二判断结果,当存在阻塞事件时,于运行队列中选择一协程切换运行过程中的协程并将运行过程中的协程挂起。
[0023]优选的,该种调度处理方法,其中步骤S4还包括:
[0024]步骤S4c,根据第二判断结果,当阻塞事件结束时,将挂起的协程重新插入运行队列中。
[0025]优选的,该种调度处理方法,其中每个虚拟处理单元包括多个虚拟寄存器;
[0026]切换的过程包括:
[0027]步骤A1,将每个虚拟寄存器中的内存数据保存至一存储区域中;
[0028]步骤A2,将运行过程中的协程的地址数据保存至一栈数据结构中;
[0029]步骤A3,将地址数据恢复至切换的协程中;
[0030]步骤A4,将内存数据从存储区域中恢复至相应的虚拟寄存器中。
[0031]一种调度处理系统,应用于上述任意一项的调度处理方法中,包括:
[0032]创建单元,根据外部的创建指令创建至少一个协程;
[0033]缓存单元,连接创建单元,用于对创建的协程进行缓存;
[0034]至少一个虚拟处理单元,用于运行协程以执行协程对应的待运行程序的指令和/或数据。
[0035]优选的,该种调度处理系统,其中还包括:
[0036]引导单元,分别连接每个虚拟处理单元和缓存单元,根据每个虚拟处理单元的可运行协程数,分配相应数量的协程至对应的虚拟处理单元并形成相应的运行队列。
[0037]优选的,该种调度处理系统,其中还包括:
[0038]第一判断单元,用于判断是否存在来自外部的第一用户指令并输出相应的第一判
断结果;
[0039]切换单元,连接第一判断单元和每个虚拟处理单元,根据第一判断结果,当存在第一用户指令时,于运行队列中选择一协程切换运行过程中的协程。
[0040]优选的,该种调度处理系统,其中还包括:
[0041]第二判断单元,用于判断是否存在一阻塞事件并输出相应的第二判断结果;
[0042]切换单元还连接第二判断单元,根据第二判断结果,当存在阻塞事件时,于运行队列中选择一协程切换运行过程中的协程并将运行过程中的协程挂起。
[0043]优选的,该种调度处理系统,其中还包括:
[0044]恢复单元,分别连接第二判断单元和每个虚拟处理单元,当阻塞事件结束时,将挂起的协程重新插入运行队列中。
[0045]优选的,该种调度处理系统,其中还包括:
[0046]标识单元,用于对协程的实时状态进行标识;
[0047]当协程处于缓存单元时,标记协程为新建状态;
[0048]当协程处于运行队列时,标记协程为准备状态;
[0049]当协程于虚拟处理单元中处于运行过程中时,标记协程为运行状态;
[0050]当协程于虚拟处理单元中运行完毕时,标记协程为终止状态;
[0051]当协程于切换单元中挂起时,标记协程为阻塞状态。
[0052]本技术方案具有如下优点或有益效果:
[0本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于协程的调度处理方法,其特征在于,所述调度处理方法包括:步骤S1,于用户态创建至少一个协程并进行缓存;步骤S2,于用户态导入至少一个待运行程序,所述待运行程序包括多个指令和/或数据,对应至少一个所述协程;步骤S3,于用户态创建至少一个虚拟处理单元,用于运行所述协程以执行对应的所述指令和/或数据;步骤S4,所述协程于所述虚拟处理单元中运行完毕,释放对应的处理资源。2.如权利要求1所述的调度处理方法,其特征在于,所述步骤S3还包括:步骤S31,获取每个所述虚拟处理单元的可运行协程数;步骤S32,根据所述可运行协程数分配所述协程至相应的所述虚拟处理单元并形成相应的运行队列。3.如权利要求2所述的调度处理方法,其特征在于,所述步骤S4还包括:步骤S41,于所述协程的运行过程中,判断是否存在来自外部的第一用户指令并输出相应的第一判断结果;步骤S42,根据所述第一判断结果,当存在所述第一用户指令时,于所述运行队列中选择一所述协程切换运行过程中的所述协程。4.如权利要求2所述的调度处理方法,其特征在于,所述步骤S4还包括:步骤S4a,于所述协程的运行过程中,判断是否存在一阻塞事件并输出相应的第二判断结果;步骤S4b,根据所述第二判断结果,当存在所述阻塞事件时,于所述运行队列中选择一所述协程切换运行过程中的所述协程并将运行过程中的所述协程挂起。5.如权利要求4所述的调度处理方法,其特征在于,所述步骤S4还包括:步骤S4c,根据所述第二判断结果,当所述阻塞事件结束时,将挂起的所述协程重新插入所述运行队列中。6.如权利要求3或4所述的调度处理方法,其特征在于,每个所述虚拟处理单元包括多个虚拟寄存器;所述切换的过程包括:步骤A1,将每个所述虚拟寄存器中的内存数据保存至一存储区域中;步骤A2,将运行过程中的所述协程的地址数据保存至一栈数据结构中;步骤A3,将所述地址数据恢复至切换的所述协程中;步骤A4,将所述内存数据从所述存储区域中恢复至相应的所述虚拟寄存器中。7.一种调度处理系统,其特征在于,应用于如权利要求...

【专利技术属性】
技术研发人员:朱烨
申请(专利权)人:上海瀚之友信息技术服务有限公司
类型:发明
国别省市:

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

1