CN112905267A - 虚拟机接入协程库的方法、装置及设备 - Google Patents
虚拟机接入协程库的方法、装置及设备 Download PDFInfo
- Publication number
- CN112905267A CN112905267A CN201911221330.2A CN201911221330A CN112905267A CN 112905267 A CN112905267 A CN 112905267A CN 201911221330 A CN201911221330 A CN 201911221330A CN 112905267 A CN112905267 A CN 112905267A
- Authority
- CN
- China
- Prior art keywords
- coroutine
- library
- virtual machine
- instruction
- task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 212
- 238000012545 processing Methods 0.000 claims description 53
- 238000003860 storage Methods 0.000 claims description 21
- 230000003993 interaction Effects 0.000 abstract description 22
- 238000010586 diagram Methods 0.000 description 28
- 230000008569 process Effects 0.000 description 20
- 238000004590 computer program Methods 0.000 description 14
- 230000000694 effects Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 9
- 238000013507 mapping Methods 0.000 description 9
- 230000000903 blocking effect Effects 0.000 description 7
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000010354 integration Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000011423 initialization method Methods 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 230000002618 waking effect Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种虚拟机接入协程库的方法、装置及设备,应用于虚拟机的方法包括:获取启动指令;根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库;根据启动指令对虚拟机进行初始化操作;向协程库发送用于标识虚拟机运行状态的状态指令,以使协程库根据状态指令进行协程库初始化操作。通过在多个预设协程库中确定至少一个用于接入虚拟机的协程库,在虚拟机进行初始化操作之后,可以向协程库发送状态指令,协程库根据状态指令进行协程库初始化操作,有效地实现了虚拟机可以与任意协程库进行数据交互,不仅可以让任意的协程库能够和任意语言的虚拟机进行集成,还可以在不同的场景中使用不同的协程,从而获得最佳性能。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种虚拟机接入协程库的方法、装置及设备。
背景技术
协程库是指封装了协程功能的库,目前应用的协程库种类较多,而不同的协程库之间的侧重点不同,有的关注延迟,有的关注易用性,可以说,不同的协程库之间各有优势。具体应用时,协程库一般在系统编程中使用,提供C语言接口供用户调用,而无法简单地集成到高级语言虚拟机中。假若直接在Java等高级语言的虚拟机中调用上述的协程库,创建协程;那么,由于执行Java代码往往依赖复杂的运行时数据结构,因此,新建的协程是无法执行Java代码的。这样就导致了针对在设计时未考虑协程的高级语言运行时,无法直接使用现有的协程库。
发明内容
本发明实施例提供了一种高级语言虚拟机接入协程库的方法、装置及设备,用以实现可以让任意协程库能够和任意语言的虚拟机集成,使得双方只需要少量的改动;这样不仅可以提供基于线程语言的并发性能,也可以在不同的场景中使用不同的协程实现,获得最佳性能。
第一方面,本发明实施例提供了一种虚拟机接入协程库的方法,应用于虚拟机,所述方法包括:
获取启动指令;
根据所述启动指令,在多个预设协程库中确定至少一个用于接入所述虚拟机的协程库;
根据所述启动指令对所述虚拟机进行初始化操作;
向所述协程库发送用于标识所述虚拟机运行状态的状态指令,以使所述协程库根据所述状态指令进行协程库初始化操作。
第二方面,本发明实施例提供了一种虚拟机接入协程库的装置,应用于虚拟机,所述装置包括:
获取模块,用于获取启动指令;
确定模块,用于根据所述启动指令,在多个预设协程库中确定至少一个用于接入所述虚拟机的协程库;
第一处理模块,用于根据所述启动指令对所述虚拟机进行初始化操作;
发送模块,用于向所述协程库发送用于标识所述虚拟机运行状态的状态指令,以使所述协程库根据所述状态指令进行协程库初始化操作。
第三方面,本发明实施例提供了一种电子设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现上述第一方面中的一种虚拟机接入协程库的方法。
第四方面,本发明实施例提供了一种计算机存储介质,用于储存计算机程序,所述计算机程序使计算机执行时实现上述第一方面中的一种虚拟机接入协程库的方法。
通过所获取的启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库,根据启动指令对虚拟机进行初始化操作,而后向协程库发送用于标识虚拟机运行状态的状态指令,以使协程库根据状态指令进行协程库初始化操作,有效地实现了虚拟机可以与任意的协程库进行数据交互,这样不仅保证了可以让任意的协程库能够和任意语言的虚拟机进行集成,并且还可以提供基于线程语言的并发性能,在不同的场景中使用不同的协程实现,获得最佳性能;进一步满足了用户的不用应用需求,提高了该方法的实用性,有利于市场的推广与应用。
第五方面,本发明实施例提供了一种虚拟机接入协程库的方法,应用于协程库,所述方法包括:
接收虚拟机发送的用于标识所述虚拟机运行状态的状态指令;
根据所述状态指令对协程库进行初始化操作。
第六方面,本发明实施例提供了一种虚拟机接入协程库的装置,应用于协程库,所述装置包括:
接收模块,用于接收虚拟机发送的用于标识所述虚拟机运行状态的状态指令;
第二处理模块,用于根据所述状态指令对协程库进行初始化操作。
第七方面,本发明实施例提供一种电子设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现上述第五方面中的一种虚拟机接入协程库的方法。
第八方面,本发明实施例提供了一种计算机存储介质,用于储存计算机程序,所述计算机程序使计算机执行时实现上述第五方面中的一种虚拟机接入协程库的方法。
通过接收虚拟机发送的用于标识虚拟机运行状态的状态指令,并根据状态指令对协程库进行初始化操作,有效地实现了协程库可以与任意的虚拟机进行数据交互,这样不仅保证了可以让任意的协程库能够和任意语言的虚拟机进行集成,并且还可以提供基于线程语言的并发性能,在不同的场景中使用不同的协程实现,获得最佳性能;进一步满足了用户的不用应用需求,提高了该方法的实用性,有利于市场的推广与应用。
第九方面,本发明实施例提供了一种任务执行方法,应用于虚拟机,所述方法包括:
获取代码执行信息;
根据所述代码执行信息生成协程创建任务;
将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
第十方面,本发明实施例提供了一种任务执行装置,应用于虚拟机,所述装置包括:
第三获取模块,用于获取代码执行信息;
第三处理模块,用于根据所述代码执行信息生成协程创建任务;
第三发送模块,用于将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
第十一方面,本发明实施例提供一种电子设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现上述第九方面中的一种任务执行方法。
第十二方面,本发明实施例提供了一种计算机存储介质,用于储存计算机程序,所述计算机程序使计算机执行时实现上述第九方面中的一种任务执行方法。
第十三方面,本发明实施例提供了一种任务执行方法,应用于协程库,所述方法包括:
接收虚拟机发送的任务切换指令;
根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
第十四方面,本发明实施例提供了一种任务执行装置,应用于协程库,所述装置包括:
第四接收模块,用于接收虚拟机发送的任务切换指令;
第四确定模块,用于根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
第十五方面,本发明实施例提供一种电子设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现上述第十三方面中的一种任务执行方法。
第十六方面,本发明实施例提供了一种计算机存储介质,用于储存计算机程序,所述计算机程序使计算机执行时实现上述第十三方面中的一种任务执行方法。
通过获取到代码执行信息,而后根据代码执行信息生成协程创建任务,将协程创建任务发送至协程库,以使协程库根据协程创建任务建立与代码执行信息相对应的协程,从而便于实现所建立的协程被虚拟机进行调用,进而虚拟机可以利用所建立的协程执行与代码执行信息相对应的代码,进而保证了对代码进行执行的稳定可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种虚拟机与协程库进行交互的示意图;
图2为本发明实施例提供的一种虚拟机接入协程库的方法的流程图一;
图3为本发明实施例提供的一种虚拟机接入协程库的方法的流程图二;
图4为本发明实施例提供的一种虚拟机接入协程库的方法的流程图三;
图5为本发明实施例提供的一种虚拟机接入协程库的方法的流程图四;
图6为本发明实施例提供的一种虚拟机接入协程库的方法的流程图五;
图7为本发明实施例提供的一种虚拟机接入协程库的方法的流程图六;
图8为本发明实施例提供的一种虚拟机接入协程库的方法的流程图七;
图9为本发明实施例提供的一种虚拟机接入协程库的方法的流程图八;
图10为本发明实施例提供的另一种虚拟机接入协程库的方法的流程图;
图11为本发明应用实施例提供的一种虚拟机与协程库进行交互的示意图一;
图12为本发明应用实施例提供的一种虚拟机与协程库进行交互的示意图二;
图13为本发明应用实施例提供的一种虚拟机与协程库进行交互的示意图三;
图14为本发明实施例提供的一种虚拟机接入协程库的装置的结构示意图;
图15为与图14所示实施例提供的虚拟机接入协程库的装置对应的电子设备的结构示意图;
图16为本发明实施例提供的一种虚拟机接入协程库的装置的结构示意图;
图17为与图16所示实施例提供的虚拟机接入协程库的装置对应的电子设备的结构示意图;
图18为本发明实施例提供的一种任务执行方法的流程图;
图19为本发明实施例提供的另一种任务执行方法的流程图;
图20为本发明实施例提供的一种任务执行装置的结构示意图;
图21为与图20所示实施例提供的任务执行装置对应的电子设备的结构示意图;
图22为本发明实施例提供的另一种任务执行装置的结构示意图;
图23为与图22所示实施例提供的任务执行装置对应的电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
图1为本发明实施例提供的一种虚拟机与协程库进行交互的示意图;图2为本发明实施例提供的一种虚拟机接入协程库的方法的流程图;参考附图1-2所示,本实施例提供了一种虚拟机接入协程库的方法,该方法的执行主体为虚拟机,也即该方法适用于虚拟机,该虚拟机可以实现为软件、或者软件和硬件的组合。具体应用时,该虚拟机可以是基于任意编程语言所构成的虚拟机,在执行虚拟机接入协程库的方法时,可以实现让任意的协程库能够和任意语言的虚拟机集成;这样不仅可以提供基于线程语言的并发性能,还可以在不同的场景中使用不同的协程实现,获得最佳性能。具体的,该方法可以包括:
S101:获取启动指令。
其中,启动指令是用于对虚拟机进行启动操作的指令信息,该启动指令可以是根据用户的执行操作生成的,从而可以使得虚拟机获得启动指令,在虚拟机获取到启动指令之后,可以根据启动指令进行启动操作。
S102:根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库。
在虚拟机根据启动指令进行启动操作时,需要动态加载协程库,该协程库可以是多个预设协程库中的至少一个协程库。具体的,本实施例对于根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库的具体实现方式不做限定,本领域技术人员可以根据具体的应用需求和应用场景进行设置,例如:启动指令中可以包括需求参数,在多个预设协程库中选择与需求参数相对应的至少一个协程库,该协程库即为用于接入虚拟机的协程库。较为优选的,本实施例中的根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库可以包括:
S1021:获取启动指令中包括的协程库参数。
S1022:根据协程库参数,在多个预设协程库中确定至少一个用于接入虚拟机的协程库。
其中,启动指令中可以包括与用于接入虚拟机的协程库相对应的协程库参数,在获取到启动指令之后,可以对启动指令进行分析识别,从而可以获得协程库参数,在获得协程库参数之后,可以根据协程库参数与协程库之间的对应关系,在多个预设协程库中确定至少一个用于接入虚拟机的协程库。举例来说:现有多个预设协程库如下:协程库1、协程库2、协程库3和协程库4,上述每个协程库所对应的协程库参数分别为:协程库参数a、协程库参数b、协程库参数c和协程库参数d,在对启动指令进行分析之后,可以获取到协程库参数c,进而可以将与协程库参数c相对应的协程库3确定为用于接入虚拟机的协程库,此时,协程库3与虚拟机之间可以进行数据交互。
可以想到的是,用户可以根据需求调用协程库,在调整用于接入虚拟机的协程库时,可以通过更改启动指令中的协程库参数来实现,即不同的协程库参数可以对应有不同的协程库,从而实现了让任意的协程库能够和任意语言的虚拟机集成。
通过上述方式确定至少一个用于接入虚拟机的协程库,有效地保证了对用于接入虚拟机的协程库进行确定的准确可靠性,并且还实现了可以让任意的协程库能够和任意语言的虚拟机集成,满足了用户的不用应用需求,进而提高了该方法的适用范围。
S103:根据启动指令对虚拟机进行初始化操作。
在确定至少一个用于接入虚拟机的协程库之后,虚拟机可以加载协程库,并且还可以根据启动指令对虚拟机进行初始化操作。具体的,根据启动指令对虚拟机进行初始化操作可以包括:
S1031:根据启动指令建立用户态线程池,用户态线程池用于承载多个不同的协程。
在虚拟机进行初始化操作时,虚拟机可以创建用户态线程池,该用户态线程池用于承载不同的协程,从而实现了对协程进行调用的准备工作,使得调用的协程可以配置在用户态线程池中,保证了对协程进行应用的稳定可靠性。
S104:向协程库发送用于标识虚拟机运行状态的状态指令,以使协程库根据状态指令进行协程库初始化操作。
在虚拟机进行初始化操作之后,虚拟机可以向协程库发送用于标识虚拟机运行状态的状态指令,具体的,该状态指令可以为预设的指令信息,例如:状态指令为“0”、“1”或者“2”,上述的“0”标识为进行初始化操作、“1”标识为正在进行初始化操作,“2”标识为初始化操作完毕;或者,状态指令为“未进行初始化”、“正在进行初始化”或者“初始化完毕”等状态关键字。一般情况下,在虚拟机进行初始化操作之后,可以向协程库发送用于标识虚拟机正在进行初始化操作的状态指令,在协程库接收到该状态指令之后,可以根据该状态指令进行协程库的初始化操作。具体的,协程库根据状态指令进行协程库初始化操作可以包括:
S1041:协程库根据状态指令建立物理线程池,物理线程池用于承载多个不同的物理线程。
在协程库进行初始化操作时,协程库可以根据虚拟机的状态指令创建物理线程池,该物理线程池用于承载不同的物理线程,从而完成了对协程被调用以及协程与物理线程之间的映射关系的准备工作,虚拟机中所建立的物理线程可以配置在物理线程池中,从而保证对物理线程进行应用的稳定可靠性。
本实施例提供的虚拟机接入协程库的方法,通过所获取的启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库,根据启动指令对虚拟机进行初始化操作,而后向协程库发送用于标识虚拟机运行状态的状态指令,以使协程库根据状态指令进行协程库初始化操作,有效地实现了虚拟机可以与任意的协程库进行数据交互,这样不仅保证了可以让任意的协程库能够和任意语言的虚拟机进行集成,并且还可以提供基于线程语言的并发性能,在不同的场景中使用不同的协程实现,获得最佳性能;进一步满足了用户的不用应用需求,提高了该方法的实用性,有利于市场的推广与应用。
图3为本发明实施例提供的一种虚拟机接入协程库的方法的流程图二;在上述实施例的基础上,继续参考附图3所示,为了进一步提高数据处理的质量和效率,本实施例中的方法还可以包括:
S201:接收协程库发送的协程库状态信息。
S202:根据协程库状态信息,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储。
具体的,在协程库根据状态指令进行协程库初始化操作之后,可以获取到用于标识协程库所处状态的协程库状态信息,该协程库状态信息用于标识协程库为初始化操作完毕的状态;在获取到协程库状态信息之后,协程库可以将协程库状态信息发送至虚拟机,从而使得虚拟机可以接收到协程库状态信息,并可以根据协程库状态信息,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储,需要注意的是,协程与物理线程的映射关系可以是多对一的映射关系,即多个协程可以与同一个物理线程进行关联存储。
通过接收协程库发送的协程库状态信息,并根据协程库状态信息,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储,有效地实现了任意的协程可以找到所对应的物理线程,任意的物理线程可以找到所对应的所有协程,从而以便实现对用户输入的代码指令进行稳定执行,进一步提高了该方法使用的稳定可靠性。
图4为本发明实施例提供的一种虚拟机接入协程库的方法的流程图三;在上述实施例的基础上,继续参考附图4所示,本实施例中的方法还可以包括:
S301:获取代码执行信息。
S302:根据代码执行信息生成协程创建任务。
S303:将协程创建任务发送至协程库,以使协程库根据协程创建任务建立与代码执行信息相对应的协程。
具体的,代码执行信息可以是根据用户的执行操作所生成的,该代码执行信息用于标识存在待运行的代码;为了实现对代码的执行操作,在接收到代码执行信息之后,虚拟机可以根据代码执行信息生成协程创建任务,在生成协程创建任务之后,虚拟机可以将协程创建任务发送至协程库,从而使得协程库可以根据所接收到的协程创建任务建立与代码执行信息相对应的协程,具体的,协程库创建任务中可以包括有与创建协程相关的数据包信息,在协程库获取到数据包信息之后,可以根据数据包信息建立与代码执行信息相对应的协程。
在获取到代码执行信息之后,根据代码执行信息生成协程创建任务,将协程创建任务发送至协程库,以使协程库根据协程创建任务建立与代码执行信息相对应的协程,从而便于实现所建立的协程被虚拟机进行调用,进而虚拟机可以利用所建立的协程执行与代码执行信息相对应的代码,进而保证了对代码进行执行的稳定可靠性。
图5为本发明实施例提供的一种虚拟机接入协程库的方法的流程图四;在上述实施例的基础上,继续参考附图5所示,本实施例中的方法还可以包括:
S401:调用与代码执行信息相对应的协程。
在协程库根据协程创建任务建立与代码执行信息相对应的协程之后,协程库中所建立的协程可以供虚拟机进行调用,以通过所调用的协程执行相对应的代码。具体的,调用与代码执行信息相对应的协程可以包括:
S4011:确定与代码执行信息相对应的协程调用接口;
其中,本实施例中对于确定与代码执行信息相对应的协程调用接口的具体实现方式不做限定,本领域技术人员可以根据具体的应用需求和设计需求进行设置,较为优选的,本实施例中的确定与代码执行信息相对应的协程调用接口可以包括:
S40111:获取与代码执行信息相对应的入口参数。
S40112:根据入口参数确定与代码执行相对应的协程调用接口。
其中,代码执行信息可以对应有不同的入口参数,而不同的入口参数可以对应有不同的协程调用接口。因此,在获取到代码执行信息之后,可以获取与代码执行信息相对应的入口参数,具体的,本实施例对于入口参数的具体获取方式不做限定,本领域技术人员可以根据具体的应用需求和设计需求进行设置,例如:代码执行信息中包括有入口参数,在获取到代码执行信息之后,可以对代码执行信息进行分析识别,从而可以获取到与代码执行信息相对应的入口参数;或者,预先存储有代码执行信息与入口参数之间的映射关系,通过映射关系可以确定与代码执行信息相对应的入口参数。在获取到入口参数之后,可以利用入口参数与协程调用接口之间的映射关系确定与代码执行相对应的协程调用接口,从而有效地保证了协程调用接口确定的准确可靠性。
当然的,本领域技术人员还可以采用其他的方式来获取与代码执行信息相对应的入口参数,只要能够保证入口参数获取的准确可靠性即可,在此不再赘述。
S4012:利用协程调用接口调用与代码执行信息相对应的协程。
其中,协程调用接口与协程之间存在映射关系,因此,在获取到协程调用接口之后,可以利用协程调用接口调用与代码执行信息相对应的协程。
S402:在协程中执行与代码执行信息相对应的代码。
在调用与代码执行信息相对应的协程之后,可以在所调用的协程中执行与代码执行信息相对应的代码,从而实现了对代码进行运行操作,满足了用户的代码运行需求,进而保证了该方法的实用性。
图6为本发明实施例提供的一种虚拟机接入协程库的方法的流程图五;在上述实施例的基础上,继续参考附图6所示,本实施例中的方法还可以包括:
S501:获取任务切换指令以及与任务切换指令相对应的目标任务。
S502:将任务切换指令发送至协程库,以使协程库确定与任务切换指令相对应的目标协程。
S503:利用目标协程执行与任务切换指令相对应的目标任务。
具体的,在虚拟机利用所调用的协程执行代码任务时,用户可以向虚拟机发送任务切换指令,该任务切换指令中可以包括有待执行的目标任务;在虚拟机获取到任务切换指令和目标任务之后,可以将任务切换指令发送至协程库,以使得协程库确定与任务切换指令相对应的目标协程,该目标协程用于实现对目标任务的执行,在确定目标协程之后,虚拟机可以调用该目标协程,进而可以利用目标协程执行与任务切换指令相对应的目标任务。
举例来说:虚拟机中正在利用协程A运行第一代码任务,在虚拟机接收到用户输入的任务切换指令之后,可以获取到与任务切换指令相对应的目标代码任务;进而虚拟机可以将任务切换指令发送至协程库,以使协程库根据任务切换指令生成与任务切换指令相对应的协程B(目标协程),而后虚拟机可以调用协程B,进而可以利用协程B运行目标代码任务,从而实现了虚拟机可以在多个代码执行任务之间进行切换,满足了用户的使用需求,进一步提高了该方法使用的灵活可靠性。
图7为本发明实施例提供的一种虚拟机接入协程库的方法的流程图六;在上述实施例的基础上,继续参考附图7所示,在获取任务切换指令之后,本实施例中的方法还可以包括:
S601:根据任务切换指令保存当前协程的执行上下文。
S602:在目标任务执行完毕后,则根据执行上下文恢复执行当前协程所执行的任务。
具体的,虚拟机在多个代码执行任务之间进行切换时,为了保证代码执行任务在切换前后可以快速地恢复的之前的运行状态,在获取任务切换指令之后,可以根据任务切换指令保存当前协程的执行上下文。其中,当前协程的执行上下文可以是指当前协程执行的状态,包括:程序计数器和其他寄存器;进而可以通过访问程序计数器和其他寄存器来获取到执行上下文,并可以把执行上下文存储在预设区域内。在切换后的目标任务执行完毕之后,可以通过访问预设区域来获取执行上下文,并根据该执行上下文恢复执行当前协程所执行的任务,进而提高了当前协程所执行的任务的执行质量和效率。
举例来说:当前协程为协程A,所执行的代码任务为第一代码任务,目标任务为第二代码任务,所对应的目标协程为协程B;此时,在接收到任务切换指令之后,可以保存协程A的第一执行上下文,此时,协程A所执行的第一代码任务需要暂停,以可以调用协程B来执行第二代码任务,其中,在调用协程B执行第二代码任务时,可以检测协程B是否存在对应的第二执行上下文,若存在,则说明之前已经利用协程B来执行过第二代码任务,因此,可以根据第二执行上下文来继续利用协程B执行第二代码任务;若不存在,则可以直接利用协程B执行第二代码任务。在第二代码任务执行完毕之后,可以获取到预先存储的第一执行上下文,并可以根据第一执行上下文恢复协程A对第一代码任务的执行状态,即协程A可以继续所暂停的状态运行第一代码任务,进而保证了第一代码任务恢复的快速、准确性,进一步提高了代码任务执行的质量和效率。
图8为本发明实施例提供的一种虚拟机接入协程库的方法的流程图七;在上述实施例的基础上,继续参考附图8所示,本实施例中的方法还可以包括:
S701:检测代码的执行状态。
S702:在代码的执行状态为执行完毕时,则根据执行状态生成协程结束指令。
S703:将协程结束指令发送至协程库,以使协程库根据协程结束指令结束与代码相对应的协程。
S704:释放与协程相对应的协程资源。
在虚拟机通过所调用的协程运行代码时,虚拟机可以实时检测代码的执行状态,该执行状态可以包括:正在执行中和执行完毕状态,在代码的执行状态为执行完毕时,为了可以保证对协程资源的有效利用,虚拟机需要释放所调用协程的协程资源,具体的,虚拟机可以先根据代码的执行完毕状态生成协程结束指令,在获取到协程结束指令之后,可以将协程结束指令发送至协程库,以使得协程库可以根据所接收到的协程结束指令结束与代码相对应的协程,在协程库结束运行与代码相对应的协程之后,虚拟机可以根据协程的结束运行状态释放与协程相对应的协程资源,以使得其他的代码执行任务可以调用相对应的协程和协程资源;从而避免了对协程资源的无效占用,有效提高了对协程资源的利用率。
图9为本发明实施例提供的一种虚拟机接入协程库的方法的流程图八;在上述实施例的基础上,继续参考附图9所示,本实施例中的方法还可以包括:
S801:检测虚拟机的工作状态。
S802:在虚拟机的工作状态为停止状态时,则根据停止状态生成针对所有物理线程的线程结束指令。
S803:结束与线程结束指令相对应的所有物理线程以及与物理线程相对应的所有协程,并释放所有协程所对应的协程资源。
在虚拟机进行工作时,可以实时检测虚拟机的运行状态,该运行状态可以包括:工作状态和停止状态,在虚拟机的运行状态为停止状态时,则说明虚拟机需要停止运行,此时,需要停止运行所有的物理线程以及物理线程所对应的所有协程。具体的,可以根据停止状态生成针对所有物理线程的线程结束指令,虚拟机可以根据该线程结束指令结束所有的物理线程和所有物理线程所对应的所有协程。其中,本实施例对于虚拟机结束与物理线程相对应的所有协程的具体实现方式不做限定,本领域技术人员可以根据具体的设计需求进行设置,较为优选的,本实施例中的结束与物理线程相对应的所有协程可以包括:
S8031:将线程结束指令发送至协程库,以使协程库结束与线程结束指令相对应的所有协程。
具体的,在虚拟机获取到线程结束指令之后,可以将线程结束指令发送至协程库,协程库接收到线程结束指令之后,可以根据线程结束指令确定与所有物理线程相对应的所有协程,并结束与线程结束指令相对应的所有协程。在协程库结束完所有的协程之后,虚拟机可以释放所有的资源。具体的,本实施例中的释放所有协程所对应的协程资源可以包括:
S8032:接收协程库发送的所有协程的结束状态。
S8033:根据所有协程的结束状态释放与所有协程相对应的协程资源。
在协程库结束与线程结束指令相对应的所有协程之后,可以向虚拟机发送所有协程的结束状态信息,在虚拟机接收到所有协程的结束状态信息之后,可以根据结束状态释放所有协程相对应的协程资源,从而实现了虚拟机与协程库停止协程运行的操作,进而保证了虚拟机与协程库之间的运行数据的有效退出,提高了虚拟机与协程库之间进行工作的稳定可靠性。
图10为本发明实施例提供的另一种虚拟机接入协程库的方法的流程图;参考附图10所示,本实施例提供了另一种虚拟机接入协程库的方法,该方法的执行主体为协程库,也即该方法适用于协程库,该协程库可以实现为软件、或者软件和硬件的组合。具体的,该方法可以包括:
S901:接收虚拟机发送的用于标识虚拟机运行状态的状态指令。
S902:根据状态指令对协程库进行初始化操作。
具体的,在虚拟机进行初始化操作之后,虚拟机可以向协程库发送用于标识虚拟机运行状态的状态指令,从而使得协程库可以接收到虚拟机发送的用于识别虚拟机运行状态的状态指令,在协程库获取到状态指令之后,可以根据状态指令对协程库进行初始化操作。具体的,根据状态指令对协程库进行初始化操作可以包括:
S9021:根据状态指令建立物理线程池,物理线程池用于承载多个不同的物理线程。
在协程库进行初始化操作时,协程库可以根据虚拟机的状态指令创建物理线程池,该物理线程池用于承载不同的物理线程,从而完成了对协程被调用以及协程与物理线程之间的映射关系的准备工作,使得虚拟机中所建立的物理线程可以配置在物理线程池中,从而保证对物理线程进行应用的稳定可靠性。
本实施例提供的虚拟机接入协程库的方法,通过接收虚拟机发送的用于标识虚拟机运行状态的状态指令,并根据状态指令对协程库进行初始化操作,有效地实现了协程库可以与任意的虚拟机进行数据交互,这样不仅保证了可以让任意的协程库能够和任意语言的虚拟机进行集成,并且还可以提供基于线程语言的并发性能,在不同的场景中使用不同的协程实现,获得最佳性能;进一步满足了用户的不用应用需求,提高了该方法的实用性,有利于市场的推广与应用。
进一步的,在根据状态指令建立物理线程池之后,本实施例中的方法还可以包括:
S1001:获取用于标识协程库运行状态的协程库状态信息。
S1002:针对物理线程创建线程调用接口。
S1003:将协程库状态信息和线程调用接口发送至虚拟机,以使虚拟机根据协程库状态信息和线程调用接口,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储。
具体的,在协程库进行初始化操作完毕之后,可以获取用于标识协程库运行状态的协程库状态信息,而后协程库可以针对物理线程创建协程调用接口,并将协程库状态信息和线程调度接口发送至虚拟机,从而使得虚拟机可以根据协程库状态和线程调用接口,将用户态线程池的协程与物理线程池中的物理线程进行关联存储,需要注意的是,协程与物理线程的映射关系可以是多对一的映射关系,即多个协程可以与同一个物理线程进行关联存储;从而使得物理线程与协程保持相同的生命周期。
通过将协程库状态信息和线程调用接口发送至虚拟机,从而使得虚拟机可以根据所接收到的协程库状态信息和线程调用接口,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储,有效地实现了任意的协程可以找到所对应的物理线程,任意的物理线程可以找到所对应的所有协程,从而便于实现对用户输入的代码指令进行稳定执行,进一步提高了该方法使用的稳定可靠性。
进一步的,本实施例中的方法还可以包括:
S1101:接收虚拟机发送的任务切换指令。
S1102:根据任务切换指令确定与任务切换指令相对应的目标协程。
具体的,在虚拟机利用所调用的协程执行代码任务时,用户可以向虚拟机发送任务切换指令,该任务切换指令中可以包括有待执行的目标任务;在虚拟机获取到任务切换指令和目标任务之后,可以将任务切换指令发送至协程库,从而使得协程库可以接收到虚拟机发送的任务切换指令,而后可以根据任务切换指令确定与任务切换指令相对应的目标协程,该目标协程用于实现对目标任务的执行,在确定目标协程之后,虚拟机可以调用该目标协程,进而可以利用目标协程执行与任务切换指令相对应的目标任务。
举例来说:虚拟机中正在利用协程A运行第一代码任务,在虚拟机接收到用户输入的任务切换指令之后,可以获取到与任务切换指令相对应的目标代码任务;进而虚拟机可以将任务切换指令发送至协程库,以使协程库根据任务切换指令生成与任务切换指令相对应的协程B(目标协程),而后虚拟机可以调用协程B,进而可以利用协程B运行目标代码任务,从而实现了虚拟机可以针对多个代码执行任务之间进行切换,满足了用户的使用需求,进一步提高了该方法使用的灵活可靠性。
进一步的,在根据任务切换指令确定与任务切换指令相对应的目标协程之后,本实施例中的方法还可以包括:
S1201:获取目标协程的状态。
S1202:若目标协程的状态为待执行状态,则唤醒目标协程。
在确定目标协程之后,协程库可以获取目标协程的状态,该状态可以包括目标协程处于待执行任务状态、目标协程处于执行任务状态中,在目标协程的状态为待执行任务状态时,则唤醒目标协程,以使得虚拟机可以通过调用的目标协程执行与任务切换指令相对应的目标任务,从而保证了对目标任务进行执行的及时可靠性。
进一步的,本实施例中的方法还可以包括:
S1301:接收虚拟机发送的协程结束指令。
S1302:根据协程结束指令结束与当前代码相对应的协程。
S1303:将协程的结束状态发送至虚拟机,以使虚拟机根据结束状态释放与协程相对应的协程资源。
在虚拟机通过所调用的协程运行代码时,虚拟机可以实时检测代码的执行状态,该执行状态可以包括:正在执行中和执行完毕状态,在代码的执行状态为执行完毕时,为了可以保证对协程资源的有效利用,虚拟机需要释放所调用协程的协程资源,具体的,虚拟机可以先根据代码的执行完毕状态生成协程结束指令,在获取到协程结束指令之后,可以将协程结束指令发送至协程库,在协程库接收到虚拟机发送的协程结束指令之后,可以根据所接收到的协程结束指令结束与代码相对应的协程,在协程库结束运行与代码相对应的协程之后,协程库可以将协程的结束状态发送至虚拟机,以使虚拟机根据结束状态释放与协程相对应的协程资源,从而使得其他的代码执行任务可以调用相对应的协程和协程资源,避免了对协程资源的占用,有效提高了对协程资源的利用率。
进一步的,本实施例中的方法还可以包括:
S1401:接收虚拟机发送的线程结束指令。
S1402:根据线程结束指令结束与线程结束指令相对应的所有协程。
S1403:将所有协程的结束状态发送至虚拟机,以使虚拟机根据所有协程的结束状态释放与所有协程相对应的协程资源。
在虚拟机进行工作时,可以实时检测虚拟机的运行状态,该运行状态可以包括:工作状态和停止状态,在虚拟机的运行状态为停止状态时,则说明虚拟机需要停止运行,此时,需要停止运行所有的物理线程以及物理线程所对应的所有协程。具体的,可以根据停止状态生成针对所有物理线程的线程结束指令,虚拟机可以根据该线程结束指令结束所有的物理线程和所有物理线程所对应的所有协程。具体的,虚拟机可以将线程结束指令发送至协程库,从而使得协程库可以接收虚拟机发送的线程结束指令,并根据线程结束指令结束与线程结束指令相对应的所有协程,在协程库结束完所有的协程之后,虚拟机可以将所有协程的结束状态发送至虚拟机,从而使得虚拟机接收协程库发送的所有协程的结束状态,并根据所有协程的结束状态释放与所有协程相对应的协程资源。
在协程库结束与线程结束指令相对应的所有协程之后,可以向虚拟机发送所有协程的结束状态信息,在虚拟机接收到所有协程的结束状态信息之后,可以根据结束状态释放所有协程相对应的协程资源,从而实现了虚拟机与协程库停止运行的操作,进而保证了虚拟机与协程库之间的运行数据的有效退出,并且也保证了虚拟机与协程库之间进行工作的稳定可靠性。
图11为本发明应用实施例提供的一种虚拟机与协程库进行交互的示意图一;图12为本发明应用实施例提供的一种虚拟机与协程库进行交互的示意图二;图13为本发明应用实施例提供的一种虚拟机与协程库进行交互的示意图三;具体应用时,参考附图11-13所示,本应用实施例提供了一种虚拟机接入协程库的方法,该方法的执行主体包括:虚拟机和与虚拟既可以通信连接的协程库;该方法可以实现让任意协程库能够和任意的高级语言虚拟机集成,尤其是针对在设计时未考虑协程的高级语言虚拟机;从而使得虚拟机和协程库之间只需要少量的改动就可以完成接入操作;这样不仅可以提供基于线程语言的并发性能,也可以在不同的场景中使用不同的协程实现,获得最佳性能。
具体的,在虚拟机与协程库之间可以进行通信之后,虚拟机使用协程库中的协程的核心应用是让应用的代码在协程中执行,也即用户可以将待运行的代码指令上传至虚拟机,虚拟机在获取到代码指令之后,可以调用协程库中的协程来执行代码执行;其中,虚拟机上还可以设置有运行时库,该运行时库可以负责协程的调度。通常来说,协程主要会影响到应用的线程创建、阻塞逻辑,而其他代码的执行不受协程影响;因此,下面分别对协程库与虚拟机之间进行交互从总流程、任务生命周期和阻塞/唤醒等方面进行说明。
参考附图11所示,在虚拟机启动时,需要动态加载协程库;对于协程库而言,可以根据实际业务的需要,选择相应的协程库;例如:实际业务的需要是关注协程库的延迟,则选择关注延迟需求的协程库;实际业务的需要是关注协程库的易用性,则选择关注易用性的协程库等等。启动过程中,虚拟机创建用户态线程,协程库创建物理线程;通过回调方法,将用户态线程和物理线程绑定。运行过程中,虚拟机等待外部请求,创建任务。协程库将任务转换为协程,调度执行。虚拟机退出时,物理线程伴随用户态线程的结束而结束,物理线程与用户态线程保持相同的生命周期。协程库与虚拟机之间进行交互的总过程包括如下步骤:
步骤1:虚拟机启动(runtime启动)。
步骤1.1:虚拟机初始化,类加载,内存地址空间分配等;
步骤1.2:创建用户态线程池(并不创建对应的物理线程);
其中,所创建的用户态线程池用于承载不同的协程,以实现虚拟机可以加载不同的协程。
步骤1.3:动态加载协程运行库(协程库),初始化函数调用指针,设置回调方法列表;根据系统配置设置协程库的初始化参数,并将协程执行入口方法入口C作为参数,调用协程库初始化方法。
上述“初始化函数调用指针”是为了实现对协程库与虚拟机之间的交互通道进行初始化,“设置回调方法列表”是为了实现虚拟机与协程库之间可以通过交互通道进行交互;“根据系统配置设置协程库的初始化参数,并将协程执行入口方法入口C作为参数,调用协程库初始化方法”是指虚拟机可以将自身的系统参数告知协程库,以保证协程库可以在虚拟机中进行稳定接入,从而保证协程的稳定运行。
步骤1.4:初始化协程库。
虚拟机可以向协程库发送启动指令,启动指令中包括协程库的指定参数,通过指定参数可以在任意的协程库中确定要加载的协程库,从而可以针对该协程库进行初始化操作。
步骤1.4.1:协程库内部初始化;
步骤1.4.2:根据虚拟机与协程库的相关参数创建物理线程池;
其中,所创建的物理线程池用于承载不同的线程,也即,该物理线程池中可以包括多个不同的线程,而一个线程里面包含多个协程。
步骤1.4.3:每个物理线程调用虚拟机的回调方法,将物理线程与用户态线程绑定,配置用户态线程的运行环境;
以上过程可以简单理解为:在协程库创建完物理线程池之后,协程库可以向虚拟机发送通知信息,以告知虚拟机此时协程库的初始化状态已经完毕,进而虚拟机可以根据该通知信息进行调用协程的操作。
步骤1.4.4:物理线程进入调度执行状态,等待可执行协程进入调度队列;
步骤1.4.5:协程库初始化完成。
步骤1.5:协程库初始化方法返回,虚拟机完成剩余初始化工作,启动完成。
一般情况下,在虚拟机和协程库进行初始化操作之后,虚拟机通常先进行一部分的初始化操作,而后协程库进行初始化操作,在协程库初始化操作完毕之后,虚拟机可以根据协程库的初始化操作完毕的状态完成所有的初始化操作。
步骤2:虚拟机等待任务执行。
所等待的任务可以是指用户输入的代码执行任务,具体应用时,在用户通过虚拟机输入代码信息时,则会触发协程创建的流程,上述用户输入代码信息的操作可以认为是用户输入了一个代码执行任务。
步骤2.1:创建任务入口,作为参数,调用协程创建接口,创建协程,由协程库调度执行。
在虚拟机接收到代码执行任务时,可以获取与代码执行任务相对应的任务参数,并可以将任务参数发送至协程库,从而使得协程库可以根据任务参数创建协程,该协程可以供虚拟机进行调度,虚拟机可以通过所调用的协程执行用户输入的代码执行任务。另外,协程库还可以调度协程库中的协程库来执行相对应的代码执行任务,举例来说:在协程库中存在多个协程时,第一个协程停止工作时,则根据调度执行测量启动下一个协程进行工作。
步骤3:虚拟机收到结束服务命令。
一般情况下,虚拟机可以检测代码信息的执行情况,在用户输入的代码信息执行完毕后,虚拟机可以接收到结束服务命令。
步骤3.1:虚拟机调用用户态线程(协程)退出方法;
步骤3.2:用户态线程调用协程库物理线程退出接口;
步骤3.3:物理线程激活处于阻塞状态的所有协程,等待每个协程执行完成;
步骤3.4:每个协程执行结束后,释放协程对应的资源;
步骤3.5:所有协程结束运行后,释放物理线程占有资源,结束该物理线程;
步骤3.6:调用协程库接口返回,结束用户态线程;
步骤3.7:所有用户态线程结束后,虚拟机结束运行。
参考附图12所示,当虚拟机收到外部Runnable请求(用于创建代码执行任务),虚拟机可以将Runnable请求发送至协程库,在协程库接收到Runnable请求之后,可以将Runnable请求转换为协程,并放入协程库的调度队列中。其中,每个协程拥有独立的寄存器上下文和栈;协程库可以根据启动时设置的调度策略,选择合适的协程执行。协程调度切换时,将寄存器上下文和栈保存到预设的其他地方,切换为协程所持有的寄存器上下文和栈;在切回来时,恢复先前保存的寄存器上下文和栈。在代码执行任务执行完成后,对应的协程也随之结束。具体的,协程库与虚拟机之间在一个生命周期中所进行交互过程包括如下步骤:
步骤1:虚拟机等待外部Runnable。
步骤1.1:将Runnable作为成员,创建任务入口;
在用户通过虚拟机输入代码时,虚拟机可以根据用户输入的代码建立一个任务入口。
步骤1.2:将任务入口作为参数,调用协程创建接口;
在获取到任务入口之后,可以将任务入口作为入口参数,根据入口参数可以生成一个协程创建接口,通过调用该协程创建接口,可以实现协程库建立协程操作。具体的,在协程库中创建协程之后,可以将协程放入预设的调度队列中,以便供虚拟机进行调用。
步骤1.3:协程库调度器根据当前负载均衡情况,选择一个物理线程,创建协程。
其中,协程库调度器可以根据当前负载的情况,选择合适的物理线程创建协程,原则上,每个物理线程均可以对应有一个协程库调度器。举例来说:现有物理线程一和物理线程二,物理线程一所对应的协程个数为100个,物理线程二所对应的协程个数为2个,此时,物理线程一所创建的协程个数明显大于物理线程二所建立的协程个数,为了保证每个物理线程可以分到均衡的协程,与物理线程二相对应的协程库调度器可以将新的协程分到该物理线程二下,以实现均衡负载的情况,保证了物理线程与协程运行的稳定可靠性。
步骤1.4:将任务入口与创建的协程绑定,设置该协程为等待运行状态;
步骤1.5:将设置完成的协程放入调度队列,等待执行。如果对应的物理线程处于空闲状态,则唤醒该物理线程。
当协程库每次创建协程的过程中,协程库均会向虚拟机发送信号,以将信号发送至与协程相对应的目标线程,从而可以获取到目标线程的状态,在目标线程处于空闲状态时,则唤醒该物理线程,从而保证了物理线程运行的质量和效率。
步骤2:物理线程调度协程执行。
步骤2.1:协程被调度准备执行,切换当前物理线程的上下文和栈为协程所对应的上下文和栈,并保存原有的上下文和栈信息;
步骤2.2:将任务入口作为调用参数,调用入口C;
其中,入口C用于创建用户代码执行的运行环境信息,因此,调用入口C可以实现为协程的调用执行进行准备资源等操作,从而保证协程执行代码任务的稳定可靠性。
步骤2.3:协程开始执行。
在协程开始执行时,可以按照预设的执行策略对代码执行操作,举例来说:用户发送了多个不用的代码执行操作,一个代码执行操作至少对应有一个协程;而针对多个执行的协程而言,根据预设的执行策略,多个协程可以先入先出执行,或者也可以先入后出执行,或者,也可以根据任务的特点进行延迟执行。
步骤3:任务执行完成。
步骤3.1:任务执行完成后,回收相关数据对象,虚拟机清理任务占有的资源;
具体的,在相关数据对象是指对任务执行的运行结果,在用户需求为需要返回任务执行完毕后的运行结果时,则可以回收相关数据对象。
步骤3.2:入口C执行结束,返回协程库调用点;
步骤3.3:恢复当前物理线程的上下文和栈;
步骤3.4:协程库根据其实现,将协程放入协程池或者释放该协程;
步骤3.5:协程库调度下一个协程开始执行;或者进入空闲状态,等待下一个协程。
具体的,在入口C执行结束之后,协程库可以返回协程库调用点,该协程库调用点即为之前暂停运行的环境数据,从而可以将协程库的运行状态恢复到之前的运行状态;该过程应用于在调用到下一个协程进行执行操作时,当前协程会被阻塞的情况,此时,协程库可以自动找到下一个可执行的协程。举例来说:现有协程A和协程B,在协程库找到协程B时,则可以恢复协程B之前保存的第一上下文,并可以基于第一上下文来执行操作;在协程B运行完毕后,协程库可以返回到协程A,具体的,可以获取到协程A之前保存的第二上下文,并根据第二上下文恢复到协程A之前的运行状态。
进一步的,参考附图13所示,通常运行时(比如Java)可以抽象出阻塞(park)、唤醒(unpark)两个应用程序编程接口(Application Programming Interface,简称API),再由上层包装出丰富的功能,比如锁、信号量、管道等同步和通信机制;在此,主要介绍虚拟机如何和协程库进行交互的过程,提供出一组阻塞/唤醒的交互接口。具体的,包括以下步骤:
步骤1:任务创建后正常执行。
步骤1.1:对于简单任务可能直接结束,直接进入流程4。
步骤1.2:对于非简单的应用,任务间存在交互,进入流程2或者3。
步骤2:任务阻塞(park)。
步骤2.1:任务执行期间,虚拟机发现需要阻塞,阻塞的通常触发原因:资源不足,需要等待;异步操作,等待其他任务的结果;需要进行IO操作,被阻塞。
步骤2.2:虚拟机可以接管用户代码的执行,调用yield函数进行切换。
步骤2.3:保存虚拟机的任务执行上下文。
步骤2.4:调用协程库的任务阻塞接口。
步骤2.5:协程库根据当前状态有2个选择。
步骤2.5.1:发现可执行任务,切换协程上下文到新任务。
步骤2.5.2:没有可执行任务,任意任务被唤醒,切换到新的可执行任务。
步骤2.6:对于被唤醒的协程,由于阻塞前是通过yield函数进入协程库,因此,协程库阻塞接口返回后,可以继续yield函数的后半部分执行。
步骤2.6.1:恢复虚拟机任务上下文。
步骤2.7:任务继续执行,可能继续到达流程2或3、最终到达4。
步骤3:任务唤醒(unpark)。
步骤3.1:执行期间,虚拟机发现需要唤醒任务,一般原因:资源释放;IO准备就绪。
步骤3.2:调用协程库的唤醒接口。
步骤3.3:任务继续执行,可能继续到达流程2或3、最终到达4。
步骤4:任务结束。
本应用实施例提供的虚拟机接入协程库的方法,是在虚拟机中接入任意协程库的一套通用方法,具体的,通过在虚拟机初始化时,回调协程库的初始化资源,在协程库创建线程时,回调虚拟机的初始化运行时资源,有效地实现了虚拟机只需要少量改动就可以接入协程库,可以减少编程工作并且有稳定性优势;另外,所创建的新协程可以进入协程库指定的协程入口,将该入口固定为调用运行时的函数入口,由于接入成本小且模式固定,虚拟机可以接入不同的协程库,根据应用的特性选择不同的协程库实现,获得不同的性能特点;此外,在协程切换时,需要保存运行的上下文,随后可以调用协程库进行协程的切换操作,并且还可以根据存储的上下文进行恢复,进一步提高了该方法使用的灵活可靠性。
图14为本发明实施例提供的一种虚拟机接入协程库的装置的结构示意图;参考附图14所示,本实施例提供了一种虚拟机接入协程库的装置,该装置可以执行上述的虚拟机接入协程库的方法,并且该装置可以应用于虚拟机,具体的,该装置可以包括:
获取模块11,用于获取启动指令;
确定模块12,用于根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库;
第一处理模块13,用于根据启动指令对虚拟机进行初始化操作;
发送模块14,用于向协程库发送用于标识虚拟机运行状态的状态指令,以使协程库根据状态指令进行协程库初始化操作。
可选地,在确定模块12根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库时,该确定模块12可以用于执行:获取启动指令中包括的协程库参数;根据协程库参数,在多个预设协程库中确定至少一个用于接入虚拟机的协程库。
可选地,在第一处理模块13根据启动指令对虚拟机进行初始化操作时,该第一处理模块13可以用于执行:根据启动指令建立用户态线程池,用户态线程池用于承载多个不同的协程。
可选地,协程库根据状态指令进行协程库初始化操作时,协程库可以用于执行:根据状态指令建立物理线程池,物理线程池用于承载多个不同的物理线程。
可选地,本实施例中的第一处理模块13还可以用于执行:接收协程库发送的协程库状态信息;根据协程库状态信息,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储。
可选地,本实施例中的获取模块11、第一处理模块13和发送模块14还可以用于执行以下步骤:
获取模块11,用于获取代码执行信息;
第一处理模块13,用于根据代码执行信息生成协程创建任务;
发送模块14,用于将协程创建任务发送至协程库,以使协程库根据协程创建任务建立与代码执行信息相对应的协程。
可选地,本实施例中的第一处理模块13还可以用于执行:调用与代码执行信息相对应的协程;在协程中执行与代码执行信息相对应的代码。
可选地,在第一处理模块13调用与代码执行信息相对应的协程时,该第一处理模块13可以用于执行:确定与代码执行信息相对应的协程调用接口;利用协程调用接口调用与代码执行信息相对应的协程。
可选地,在第一处理模块13确定与代码执行信息相对应的协程调用接口时,该第一处理模块13可以用于执行:获取与代码执行信息相对应的入口参数;根据入口参数确定与代码执行相对应的协程调用接口。
可选地,本实施例中的获取模块11、第一处理模块13和发送模块14还可以用于执行以下步骤:
获取模块11,用于获取任务切换指令以及与任务切换指令相对应的目标任务;
发送模块14,用于将任务切换指令发送至协程库,以使协程库确定与任务切换指令相对应的目标协程;
第一处理模块13,用于利用目标协程执行与任务切换指令相对应的目标任务。
可选地,在获取任务切换指令之后,本实施例中的第一处理模块13还可以用于执行:根据任务切换指令保存当前协程的执行上下文;在目标任务执行完毕后,则根据执行上下文恢复执行当前协程所执行的任务。
可选地,本实施例中的第一处理模块13还可以用于执行:检测代码的执行状态;在代码的执行状态为执行完毕时,则根据执行状态生成协程结束指令;将协程结束指令发送至协程库,以使协程库根据协程结束指令结束与代码相对应的协程;释放与协程相对应的协程资源。
可选地,本实施例中的第一处理模块13还可以用于执行:检测虚拟机的工作状态;在虚拟机的工作状态为停止状态时,则根据停止状态生成针对所有物理线程的线程结束指令;结束与线程结束指令相对应的所有物理线程以及与物理线程相对应的所有协程,并释放所有协程所对应的协程资源。
可选地,在第一处理模块13结束与物理线程相对应的所有协程时,该第一处理模块13可以用于执行:将线程结束指令发送至协程库,以使协程库结束与线程结束指令相对应的所有协程。
可选地,在第一处理模块13释放所有协程所对应的协程资源时,该第一处理模块13可以用于执行:接收协程库发送的所有协程的结束状态;根据所有协程的结束状态释放与所有协程相对应的协程资源。
图14所示装置可以执行图1-图9、图11-图13所示实施例的方法,本实施例未详细描述的部分,可参考对图1-图9、图11-图13所示实施例的相关说明。该技术方案的执行过程和技术效果参见图1-图9、图11-图13所示实施例中的描述,在此不再赘述。
在一个可能的设计中,图14所示装置的结构可实现为一电子设备,该电子设备可以是台式电脑、服务器等各种设备。如图15所示,该电子设备可以包括:第一处理器21和第一存储器22。其中,第一存储器22用于存储支持电子设备执行上述图1-图9、图11-图13所示实施例中提供的虚拟机接入协程库的方法的程序,第一处理器21被配置为用于执行第一存储器22中存储的程序。
程序包括一条或多条计算机指令,其中,一条或多条计算机指令被第一处理器21执行时能够实现如下步骤:
获取启动指令;
根据启动指令,在多个预设协程库中确定至少一个用于接入虚拟机的协程库;
根据启动指令对虚拟机进行初始化操作;
向协程库发送用于标识虚拟机运行状态的状态指令,以使协程库根据状态指令进行协程库初始化操作。
可选地,第一处理器21用于执行前述图1-图9、图11-图13所示实施例中的全部或部分步骤。
其中,电子设备的结构中还可以包括第一通信接口23,用于电子设备与其他设备或通信网络通信。
另外,本发明实施例提供了一种计算机存储介质,用于储存电子设备所用的计算机软件指令,其包含用于执行上述图1-图9、图11-图13所示方法实施例中虚拟机接入协程库的方法所涉及的程序。
图16为本发明实施例提供的一种虚拟机接入协程库的装置的结构示意图;参考附图16所示,本实施例提供了一种虚拟机接入协程库的装置,该装置可以执行上述的虚拟机接入协程库的方法,并且该装置可以应用于协程库,具体的,该装置可以包括:
接收模块31,用于接收虚拟机发送的用于标识虚拟机运行状态的状态指令;
第二处理模块32,用于根据状态指令对协程库进行初始化操作。
可选地,在第二处理模块32根据状态指令对协程库进行初始化操作时,该第二处理模块32可以用于执行:根据状态指令建立物理线程池,物理线程池用于承载多个不同的物理线程。
可选地,在根据状态指令建立物理线程池之后,本实施例中的第二处理模块32还可以用于执行:获取用于标识协程库运行状态的协程库状态信息;针对物理线程创建线程调用接口;将协程库状态信息和线程调用接口发送至虚拟机,以使虚拟机根据协程库状态信息和线程调用接口,将用户态线程池中的协程与物理线程池中的物理线程进行关联存储。
可选地,本实施例中的接收模块31和第二处理模块32还可以用于执行以下步骤:
接收模块31,用于接收虚拟机发送的任务切换指令;
第二处理模块32,用于根据任务切换指令确定与任务切换指令相对应的目标协程。
可选地,在根据任务切换指令确定与任务切换指令相对应的目标协程之后,本实施例中的第二处理模块32还可以用于执行:获取目标协程的状态;若目标协程的状态为待执行状态,则唤醒目标协程。
可选地,本实施例中的接收模块31和第二处理模块32还可以用于执行以下步骤:
接收模块31,用于接收虚拟机发送的协程结束指令;
第二处理模块32,用于根据协程结束指令结束与当前代码相对应的协程;将协程的结束状态发送至虚拟机,以使虚拟机根据结束状态释放与协程相对应的协程资源。
可选地,本实施例中的接收模块31和第二处理模块32还可以用于执行以下步骤:
接收模块31,用于接收虚拟机发送的线程结束指令;
第二处理模块32,用于根据线程结束指令结束与线程结束指令相对应的所有协程;将所有协程的结束状态发送至虚拟机,以使虚拟机根据所有协程的结束状态释放与所有协程相对应的协程资源。
图16所示装置可以执行图10-图13所示实施例的方法,本实施例未详细描述的部分,可参考对图10-图13所示实施例的相关说明。该技术方案的执行过程和技术效果参见图10-图13所示实施例中的描述,在此不再赘述。
在一个可能的设计中,图16所示装置的结构可实现为一电子设备,该电子设备可以是手机、平板电脑、服务器等各种设备。如图17所示,该电子设备可以包括:第二处理器41和第二存储器42。其中,第二存储器42用于存储支持电子设备执行上述图10-图13所示实施例中提供的虚拟机接入协程库的方法的程序,第二处理器41被配置为用于执行第二存储器42中存储的程序。
程序包括一条或多条计算机指令,其中,一条或多条计算机指令被第二处理器41执行时能够实现如下步骤:
接收虚拟机发送的用于标识虚拟机运行状态的状态指令;
根据状态指令对协程库进行初始化操作。
可选地,第二处理器41用于执行前述图10-图13所示实施例中的全部或部分步骤。
其中,电子设备的结构中还可以包括第二通信接口43,用于电子设备与其他设备或通信网络通信。
另外,本发明实施例提供了一种计算机存储介质,用于储存电子设备所用的计算机软件指令,其包含用于执行上述图10-图13所示方法实施例中虚拟机接入协程库的方法所涉及的程序。
图18为本发明实施例提供的一种任务执行方法的流程图;参考附图18所示,本实施例提供了一种任务执行方法,该方法的执行主体为虚拟机,也即该方法适用于虚拟机,该虚拟机可以实现为软件、或者软件和硬件的组合。具体应用时,该虚拟机可以是基于任意编程语言所构成的虚拟机,在执行虚拟机接入协程库的方法时,可以实现让任意的协程库能够和任意语言的虚拟机集成;这样不仅可以提供基于线程语言的并发性能,还可以在不同的场景中使用不同的协程实现,获得最佳性能。具体的,该方法可以包括:
S1801:获取代码执行信息;
S1802:根据所述代码执行信息生成协程创建任务;
S1803:将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
本实施例提供的任务执行方法的具体实现过程、实现原理和实现效果与图4所示实施例的方法的具体实现过程、实现原理和实现效果相同,本实施例未详细描述的部分,可参考对图4所示实施例的相关说明。该技术方案的执行过程和技术效果参见图4所示实施例中的描述,在此不再赘述。
可选地,本实施例中的方法还包括:调用与所述代码执行信息相对应的协程;在所述协程中执行与所述代码执行信息相对应的代码。
可选地,调用与所述代码执行信息相对应的协程可以包括:确定与所述代码执行信息相对应的协程调用接口;利用所述协程调用接口调用与所述代码执行信息相对应的协程。
可选地,确定与所述代码执行信息相对应的协程调用接口可以包括:获取与所述代码执行信息相对应的入口参数;根据所述入口参数确定与所述代码执行相对应的协程调用接口。
可选地,本实施例中的方法还包括:获取任务切换指令以及与所述任务切换指令相对应的目标任务;将所述任务切换指令发送至协程库,以使所述协程库确定与任务切换指令相对应的目标协程;利用所述目标协程执行与所述任务切换指令相对应的目标任务。
可选地,在获取任务切换指令之后,本实施例中的方法还包括:根据所述任务切换指令保存当前协程的执行上下文;在所述目标任务执行完毕后,则根据所述执行上下文恢复执行所述当前协程所执行的任务。
可选地,本实施例中的方法还包括:检测所述代码的执行状态;在所述代码的执行状态为执行完毕时,则根据所述执行状态生成协程结束指令;将所述协程结束指令发送至所述协程库,以使所述协程库根据所述协程结束指令结束与所述代码相对应的协程;释放与所述协程相对应的协程资源。
可选地,本实施例中的方法还包括:检测虚拟机的工作状态;在所述虚拟机的工作状态为停止状态时,则根据所述停止状态生成针对所有物理线程的线程结束指令;结束与所述线程结束指令相对应的所有物理线程以及与所述物理线程相对应的所有协程,并释放所有协程所对应的协程资源。
可选地,结束与所述物理线程相对应的所有协程,包括:将所述线程结束指令发送至协程库,以使所述协程库结束与所述线程结束指令相对应的所有协程。
可选地,释放所有协程所对应的协程资源,包括:接收所述协程库发送的所有协程的结束状态;根据所有协程的结束状态释放与所有协程相对应的协程资源。
本实施例中上述方法步骤的实现过程、实现原理和实现效果与上述图5-图9、图11-图13所示实施例的方法相类似,本实施例未详细描述的部分,可参考对图5-图9、图11-图13所示实施例的相关说明。该技术方案的执行过程和技术效果参见图5-图9、图11-图13所示实施例中的描述,在此不再赘述。
图19为本发明实施例提供的另一种任务执行方法的流程图;参考附图18所示,本实施例提供了另一种任务执行方法,该方法的执行主体为协程库,也即该方法适用于协程库,该协程库可以实现为软件、或者软件和硬件的组合。
具体的,该方法可以包括:
S1901:接收虚拟机发送的任务切换指令;
S1902:根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
本实施例提供的任务执行方法的具体实现过程、实现原理和实现效果与上述实施例的方法步骤S1101-S1102的具体实现过程、实现原理和实现效果相同,本实施例未详细描述的部分,可参考上述实施例的相关说明。该技术方案的执行过程和技术效果参见上述实施例中的描述,在此不再赘述。
可选地,在根据所述任务切换指令确定与所述任务切换指令相对应的目标协程之后,本实施例中的方法还包括:获取所述目标协程的状态;若所述目标协程的状态为待执行状态,则唤醒所述目标协程。
可选地,本实施例中的方法还包括:接收虚拟机发送的协程结束指令;根据所述协程结束指令结束与当前代码相对应的协程;将所述协程的结束状态发送至虚拟机,以使所述虚拟机根据所述结束状态释放与所述协程相对应的协程资源。
可选地,本实施例中的方法还包括:接收虚拟机发送的线程结束指令;根据所述线程结束指令结束与所述线程结束指令相对应的所有协程;将所有协程的结束状态发送至虚拟机,以使所述虚拟机根据所有协程的结束状态释放与所有协程相对应的协程资源。
本实施例中上述方法步骤的实现过程、实现原理和实现效果与上述图10-图13所示实施例的方法相类似,本实施例未详细描述的部分,可参考对图10-图13所示实施例的相关说明。该技术方案的执行过程和技术效果参见图10-图13所示实施例中的描述,在此不再赘述。
图20为本发明实施例提供的一种任务执行装置的结构示意图;参考附图20所示,本实施例提供了一种任务执行装置,该装置可以执行上述图18所示的任务执行方法,并且该装置可以应用于虚拟机,具体的,该装置可以包括:
第三获取模块51,用于获取代码执行信息;
第三处理模块52,用于根据所述代码执行信息生成协程创建任务;
第三发送模块53,用于将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
可选地,本实施例中的第三处理模块52还用于:调用与所述代码执行信息相对应的协程;在所述协程中执行与所述代码执行信息相对应的代码。
可选地,在第三处理模块52调用与所述代码执行信息相对应的协程时,该第三处理模块52用于:确定与所述代码执行信息相对应的协程调用接口;利用所述协程调用接口调用与所述代码执行信息相对应的协程。
可选地,在第三处理模块52确定与所述代码执行信息相对应的协程调用接口时,该第三处理模块52用于:获取与所述代码执行信息相对应的入口参数;根据所述入口参数确定与所述代码执行相对应的协程调用接口。
可选地,本实施例中的第三获取模块51和第三处理模块52还用于执行以下步骤:
第三获取模块51,用于获取任务切换指令以及与所述任务切换指令相对应的目标任务;
第三处理模块52,用于将所述任务切换指令发送至协程库,以使所述协程库确定与任务切换指令相对应的目标协程;利用所述目标协程执行与所述任务切换指令相对应的目标任务。
可选地,在获取任务切换指令之后,本实施例中的第三处理模块52还用于:根据所述任务切换指令保存当前协程的执行上下文;在所述目标任务执行完毕后,则根据所述执行上下文恢复执行所述当前协程所执行的任务。
可选地,本实施例中的第三处理模块52还用于:检测所述代码的执行状态;在所述代码的执行状态为执行完毕时,则根据所述执行状态生成协程结束指令;将所述协程结束指令发送至所述协程库,以使所述协程库根据所述协程结束指令结束与所述代码相对应的协程;释放与所述协程相对应的协程资源。
可选地,本实施例中的第三处理模块52还用于:检测虚拟机的工作状态;在所述虚拟机的工作状态为停止状态时,则根据所述停止状态生成针对所有物理线程的线程结束指令;结束与所述线程结束指令相对应的所有物理线程以及与所述物理线程相对应的所有协程,并释放所有协程所对应的协程资源。
可选地,在第三处理模块52结束与所述物理线程相对应的所有协程时,该第三处理模块52还用于:将所述线程结束指令发送至协程库,以使所述协程库结束与所述线程结束指令相对应的所有协程。
可选地,在第三处理模块52释放所有协程所对应的协程资源时,该第三处理模块52还用于:接收所述协程库发送的所有协程的结束状态;根据所有协程的结束状态释放与所有协程相对应的协程资源。
图20所示装置可以执行图18所示实施例的方法,本实施例未详细描述的部分,可参考对图18所示实施例的相关说明。该技术方案的执行过程和技术效果参见图18所示实施例中的描述,在此不再赘述。
在一个可能的设计中,图20所示装置的结构可实现为一电子设备,该电子设备可以是台式电脑、服务器等各种设备。如图21所示,该电子设备可以包括:第三处理器61和第三存储器62。其中,第三存储器62用于存储支持电子设备执行上述图18所示实施例中提供的任务执行方法的程序,第三处理器61被配置为用于执行第三存储器62中存储的程序。
程序包括一条或多条计算机指令,其中,一条或多条计算机指令被第一处理器21执行时能够实现如下步骤:
获取代码执行信息;
根据所述代码执行信息生成协程创建任务;
将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
可选地,第三处理器61用于执行前述图18所示实施例中的全部或部分步骤。
其中,电子设备的结构中还可以包括第三通信接口63,用于电子设备与其他设备或通信网络通信。
另外,本发明实施例提供了一种计算机存储介质,用于储存电子设备所用的计算机软件指令,其包含用于执行上述图18所示方法实施例中任务执行方法所涉及的程序。
图22为本发明实施例提供的另一种任务执行装置的结构示意图;参考附图22所示,本实施例提供了另一种任务执行装置,该装置可以执行上述图19所示的任务执行方法,并且该装置可以应用于协程库,具体的,该装置可以包括:
第四接收模块71,用于接收虚拟机发送的任务切换指令;
第四确定模块72,用于根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
可选地,在根据所述任务切换指令确定与所述任务切换指令相对应的目标协程之后,本实施例中的第四确定模块72还用于:获取所述目标协程的状态;若所述目标协程的状态为待执行状态,则唤醒所述目标协程。
可选地,本实施例中的第四接收模块71和第四确定模块72还可以用于执行以下步骤:
第四接收模块71,用于接收虚拟机发送的协程结束指令;
第四确定模块72,用于根据所述协程结束指令结束与当前代码相对应的协程;将所述协程的结束状态发送至虚拟机,以使所述虚拟机根据所述结束状态释放与所述协程相对应的协程资源。
可选地,本实施例中的第四接收模块71和第四确定模块72还可以用于执行以下步骤:
第四接收模块71,用于接收虚拟机发送的线程结束指令;
第四确定模块72,用于根据所述线程结束指令结束与所述线程结束指令相对应的所有协程;将所有协程的结束状态发送至虚拟机,以使所述虚拟机根据所有协程的结束状态释放与所有协程相对应的协程资源。
图22所示装置可以执行图19所示实施例的方法,本实施例未详细描述的部分,可参考对图19所示实施例的相关说明。该技术方案的执行过程和技术效果参见图19所示实施例中的描述,在此不再赘述。
在一个可能的设计中,图22所示装置的结构可实现为一电子设备,该电子设备可以是手机、平板电脑、服务器等各种设备。如图23所示,该电子设备可以包括:第四处理器81和第四存储器82。其中,第四存储器82用于存储支持电子设备执行上述图19所示实施例中提供的任务执行方法的程序,第四处理器81被配置为用于执行第四存储器82中存储的程序。
程序包括一条或多条计算机指令,其中,一条或多条计算机指令被第四处理器81执行时能够实现如下步骤:
接收虚拟机发送的任务切换指令;
根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
可选地,第四处理器81用于执行前述图19所示实施例中的全部或部分步骤。
其中,电子设备的结构中还可以包括第四通信接口83,用于电子设备与其他设备或通信网络通信。
另外,本发明实施例提供了一种计算机存储介质,用于储存电子设备所用的计算机软件指令,其包含用于执行上述图19所示方法实施例中任务执行方法所涉及的程序。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程设备的处理器以产生一个机器,使得通过计算机或其他可编程设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (44)
1.一种虚拟机接入协程库的方法,其特征在于,应用于虚拟机,所述方法包括:
获取启动指令;
根据所述启动指令,在多个预设协程库中确定至少一个用于接入所述虚拟机的协程库;
根据所述启动指令对所述虚拟机进行初始化操作;
向所述协程库发送用于标识所述虚拟机运行状态的状态指令,以使所述协程库根据所述状态指令进行协程库初始化操作。
2.根据权利要求1所述的方法,其特征在于,根据所述启动指令,在多个预设协程库中确定至少一个用于接入所述虚拟机的协程库,包括:
获取所述启动指令中包括的协程库参数;
根据所述协程库参数,在多个预设协程库中确定至少一个用于接入所述虚拟机的协程库。
3.根据权利要求1所述的方法,其特征在于,根据所述启动指令对所述虚拟机进行初始化操作,包括:
根据所述启动指令建立用户态线程池,所述用户态线程池用于承载多个不同的协程。
4.根据权利要求3所述的方法,其特征在于,所述协程库根据所述状态指令进行协程库初始化操作,包括:
所述协程库根据所述状态指令建立物理线程池,所述物理线程池用于承载多个不同的物理线程。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
接收所述协程库发送的协程库状态信息;
根据所述协程库状态信息,将所述用户态线程池中的协程与所述物理线程池中的物理线程进行关联存储。
6.根据权利要求1-5中任意一项所述的方法,其特征在于,所述方法还包括:
获取代码执行信息;
根据所述代码执行信息生成协程创建任务;
将所述协程创建任务发送至所述协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
调用与所述代码执行信息相对应的协程;
在所述协程中执行与所述代码执行信息相对应的代码。
8.根据权利要求7所述的方法,其特征在于,调用与所述代码执行信息相对应的协程,包括:
确定与所述代码执行信息相对应的协程调用接口;
利用所述协程调用接口调用与所述代码执行信息相对应的协程。
9.根据权利要求8所述的方法,其特征在于,确定与所述代码执行信息相对应的协程调用接口,包括:
获取与所述代码执行信息相对应的入口参数;
根据所述入口参数确定与所述代码执行相对应的协程调用接口。
10.根据权利要求6所述的方法,其特征在于,所述方法还包括:
获取任务切换指令以及与所述任务切换指令相对应的目标任务;
将所述任务切换指令发送至协程库,以使所述协程库确定与任务切换指令相对应的目标协程;
利用所述目标协程执行与所述任务切换指令相对应的目标任务。
11.根据权利要求10所述的方法,其特征在于,在获取任务切换指令之后,所述方法还包括:
根据所述任务切换指令保存当前协程的执行上下文;
在所述目标任务执行完毕后,则根据所述执行上下文恢复执行所述当前协程所执行的任务。
12.根据权利要求6所述的方法,其特征在于,所述方法还包括:
检测所述代码的执行状态;
在所述代码的执行状态为执行完毕时,则根据所述执行状态生成协程结束指令;
将所述协程结束指令发送至所述协程库,以使所述协程库根据所述协程结束指令结束与所述代码相对应的协程;
释放与所述协程相对应的协程资源。
13.根据权利要求6所述的方法,其特征在于,所述方法还包括:
检测虚拟机的工作状态;
在所述虚拟机的工作状态为停止状态时,则根据所述停止状态生成针对所有物理线程的线程结束指令;
结束与所述线程结束指令相对应的所有物理线程以及与所述物理线程相对应的所有协程,并释放所有协程所对应的协程资源。
14.根据权利要求13所述的方法,其特征在于,结束与所述物理线程相对应的所有协程,包括:
将所述线程结束指令发送至协程库,以使所述协程库结束与所述线程结束指令相对应的所有协程。
15.根据权利要求14所述的方法,其特征在于,释放所有协程所对应的协程资源,包括:
接收所述协程库发送的所有协程的结束状态;
根据所有协程的结束状态释放与所有协程相对应的协程资源。
16.一种虚拟机接入协程库的方法,其特征在于,应用于协程库,所述方法包括:
接收虚拟机发送的用于标识所述虚拟机运行状态的状态指令;
根据所述状态指令对协程库进行初始化操作。
17.根据权利要求16所述的方法,其特征在于,根据所述状态指令对协程库进行初始化操作,包括:
根据所述状态指令建立物理线程池,所述物理线程池用于承载多个不同的物理线程。
18.根据权利要求17所述的方法,其特征在于,在根据所述状态指令建立物理线程池之后,所述方法还包括:
获取用于标识协程库运行状态的协程库状态信息;
针对所述物理线程创建线程调用接口;
将所述协程库状态信息和线程调用接口发送至虚拟机,以使所述虚拟机根据所述协程库状态信息和线程调用接口,将用户态线程池中的协程与所述物理线程池中的物理线程进行关联存储。
19.根据权利要求16所述的方法,其特征在于,所述方法还包括:
接收虚拟机发送的任务切换指令;
根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
20.根据权利要求19所述的方法,其特征在于,在根据所述任务切换指令确定与所述任务切换指令相对应的目标协程之后,所述方法还包括:
获取所述目标协程的状态;
若所述目标协程的状态为待执行状态,则唤醒所述目标协程。
21.根据权利要求16-20中任意一项所述的方法,其特征在于,所述方法还包括:
接收虚拟机发送的协程结束指令;
根据所述协程结束指令结束与当前代码相对应的协程;
将所述协程的结束状态发送至虚拟机,以使所述虚拟机根据所述结束状态释放与所述协程相对应的协程资源。
22.根据权利要求16-20中任意一项所述的方法,其特征在于,
接收虚拟机发送的线程结束指令;
根据所述线程结束指令结束与所述线程结束指令相对应的所有协程;
将所有协程的结束状态发送至虚拟机,以使所述虚拟机根据所有协程的结束状态释放与所有协程相对应的协程资源。
23.一种虚拟机接入协程库的装置,其特征在于,应用于虚拟机,所述装置包括:
获取模块,用于获取启动指令;
确定模块,用于根据所述启动指令,在多个预设协程库中确定至少一个用于接入所述虚拟机的协程库;
第一处理模块,用于根据所述启动指令对所述虚拟机进行初始化操作;
发送模块,用于向所述协程库发送用于标识所述虚拟机运行状态的状态指令,以使所述协程库根据所述状态指令进行协程库初始化操作。
24.一种电子设备,其特征在于,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如权利要求1至15中任一项所述的虚拟机接入协程库的方法。
25.一种虚拟机接入协程库的装置,其特征在于,应用于协程库,所述装置包括:
接收模块,用于接收虚拟机发送的用于标识所述虚拟机运行状态的状态指令;
第二处理模块,用于根据所述状态指令对协程库进行初始化操作。
26.一种电子设备,其特征在于,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如权利要求16至22中任一项所述的虚拟机接入协程库的方法。
27.一种任务执行方法,其特征在于,应用于虚拟机,所述方法包括:
获取代码执行信息;
根据所述代码执行信息生成协程创建任务;
将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
28.根据权利要求27所述的方法,其特征在于,所述方法还包括:
调用与所述代码执行信息相对应的协程;
在所述协程中执行与所述代码执行信息相对应的代码。
29.根据权利要求28所述的方法,其特征在于,调用与所述代码执行信息相对应的协程,包括:
确定与所述代码执行信息相对应的协程调用接口;
利用所述协程调用接口调用与所述代码执行信息相对应的协程。
30.根据权利要求29所述的方法,其特征在于,确定与所述代码执行信息相对应的协程调用接口,包括:
获取与所述代码执行信息相对应的入口参数;
根据所述入口参数确定与所述代码执行相对应的协程调用接口。
31.根据权利要求27所述的方法,其特征在于,所述方法还包括:
获取任务切换指令以及与所述任务切换指令相对应的目标任务;
将所述任务切换指令发送至协程库,以使所述协程库确定与任务切换指令相对应的目标协程;
利用所述目标协程执行与所述任务切换指令相对应的目标任务。
32.根据权利要求31所述的方法,其特征在于,在获取任务切换指令之后,所述方法还包括:
根据所述任务切换指令保存当前协程的执行上下文;
在所述目标任务执行完毕后,则根据所述执行上下文恢复执行所述当前协程所执行的任务。
33.根据权利要求27所述的方法,其特征在于,所述方法还包括:
检测所述代码的执行状态;
在所述代码的执行状态为执行完毕时,则根据所述执行状态生成协程结束指令;
将所述协程结束指令发送至所述协程库,以使所述协程库根据所述协程结束指令结束与所述代码相对应的协程;
释放与所述协程相对应的协程资源。
34.根据权利要求27所述的方法,其特征在于,所述方法还包括:
检测虚拟机的工作状态;
在所述虚拟机的工作状态为停止状态时,则根据所述停止状态生成针对所有物理线程的线程结束指令;
结束与所述线程结束指令相对应的所有物理线程以及与所述物理线程相对应的所有协程,并释放所有协程所对应的协程资源。
35.根据权利要求34所述的方法,其特征在于,结束与所述物理线程相对应的所有协程,包括:
将所述线程结束指令发送至协程库,以使所述协程库结束与所述线程结束指令相对应的所有协程。
36.根据权利要求35所述的方法,其特征在于,释放所有协程所对应的协程资源,包括:
接收所述协程库发送的所有协程的结束状态;
根据所有协程的结束状态释放与所有协程相对应的协程资源。
37.一种任务执行方法,其特征在于,应用于协程库,所述方法包括:
接收虚拟机发送的任务切换指令;
根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
38.根据权利要求37所述的方法,其特征在于,在根据所述任务切换指令确定与所述任务切换指令相对应的目标协程之后,所述方法还包括:
获取所述目标协程的状态;
若所述目标协程的状态为待执行状态,则唤醒所述目标协程。
39.根据权利要求37或38所述的方法,其特征在于,所述方法还包括:
接收虚拟机发送的协程结束指令;
根据所述协程结束指令结束与当前代码相对应的协程;
将所述协程的结束状态发送至虚拟机,以使所述虚拟机根据所述结束状态释放与所述协程相对应的协程资源。
40.根据权利要求37或38所述的方法,其特征在于,所述方法还包括:
接收虚拟机发送的线程结束指令;
根据所述线程结束指令结束与所述线程结束指令相对应的所有协程;
将所有协程的结束状态发送至虚拟机,以使所述虚拟机根据所有协程的结束状态释放与所有协程相对应的协程资源。
41.一种任务执行装置,其特征在于,应用于虚拟机,所述装置包括:
第三获取模块,用于获取代码执行信息;
第三处理模块,用于根据所述代码执行信息生成协程创建任务;
第三发送模块,用于将所述协程创建任务发送至协程库,以使所述协程库根据所述协程创建任务建立与所述代码执行信息相对应的协程。
42.一种电子设备,其特征在于,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如权利要求27至36中任一项所述的任务执行方法。
43.一种任务执行装置,其特征在于,应用于协程库,所述装置包括:
第四接收模块,用于接收虚拟机发送的任务切换指令;
第四确定模块,用于根据所述任务切换指令确定与所述任务切换指令相对应的目标协程。
44.一种电子设备,其特征在于,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如权利要求37至40中任一项所述的任务执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911221330.2A CN112905267B (zh) | 2019-12-03 | 2019-12-03 | 虚拟机接入协程库的方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911221330.2A CN112905267B (zh) | 2019-12-03 | 2019-12-03 | 虚拟机接入协程库的方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112905267A true CN112905267A (zh) | 2021-06-04 |
CN112905267B CN112905267B (zh) | 2024-05-10 |
Family
ID=76104708
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911221330.2A Active CN112905267B (zh) | 2019-12-03 | 2019-12-03 | 虚拟机接入协程库的方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112905267B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1967487A (zh) * | 2005-11-18 | 2007-05-23 | Sap股份公司 | 使用协程和线程的协同调度 |
CN106527335A (zh) * | 2016-12-08 | 2017-03-22 | 湖南戈人自动化科技有限公司 | 一种支持协程功能的plc控制器 |
WO2017063521A1 (zh) * | 2015-10-15 | 2017-04-20 | 中兴通讯股份有限公司 | 协程监控方法及装置 |
CN106980546A (zh) * | 2016-01-18 | 2017-07-25 | 阿里巴巴集团控股有限公司 | 一种任务异步执行方法、装置及系统 |
CN107479980A (zh) * | 2016-06-08 | 2017-12-15 | 阿里巴巴集团控股有限公司 | 一种检测应用中死锁的方法与设备 |
CN107992344A (zh) * | 2016-10-25 | 2018-05-04 | 腾讯科技(深圳)有限公司 | 一种协程实现方法及装置 |
CN109257411A (zh) * | 2018-07-31 | 2019-01-22 | 平安科技(深圳)有限公司 | 一种业务处理方法、调用管理系统和计算机设备 |
CN109739482A (zh) * | 2018-12-28 | 2019-05-10 | 杭州东信北邮信息技术有限公司 | 一种基于动态语言的业务逻辑执行系统及方法 |
CN109885386A (zh) * | 2019-01-03 | 2019-06-14 | 北京潘达互娱科技有限公司 | 一种多任务执行的方法、装置及电子设备 |
-
2019
- 2019-12-03 CN CN201911221330.2A patent/CN112905267B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1967487A (zh) * | 2005-11-18 | 2007-05-23 | Sap股份公司 | 使用协程和线程的协同调度 |
WO2017063521A1 (zh) * | 2015-10-15 | 2017-04-20 | 中兴通讯股份有限公司 | 协程监控方法及装置 |
CN106980546A (zh) * | 2016-01-18 | 2017-07-25 | 阿里巴巴集团控股有限公司 | 一种任务异步执行方法、装置及系统 |
CN107479980A (zh) * | 2016-06-08 | 2017-12-15 | 阿里巴巴集团控股有限公司 | 一种检测应用中死锁的方法与设备 |
CN107992344A (zh) * | 2016-10-25 | 2018-05-04 | 腾讯科技(深圳)有限公司 | 一种协程实现方法及装置 |
CN106527335A (zh) * | 2016-12-08 | 2017-03-22 | 湖南戈人自动化科技有限公司 | 一种支持协程功能的plc控制器 |
CN109257411A (zh) * | 2018-07-31 | 2019-01-22 | 平安科技(深圳)有限公司 | 一种业务处理方法、调用管理系统和计算机设备 |
CN109739482A (zh) * | 2018-12-28 | 2019-05-10 | 杭州东信北邮信息技术有限公司 | 一种基于动态语言的业务逻辑执行系统及方法 |
CN109885386A (zh) * | 2019-01-03 | 2019-06-14 | 北京潘达互娱科技有限公司 | 一种多任务执行的方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
刘健;黄才胜;: "基于协程的高并发架构研究", 数字技术与应用, no. 04, 12 June 2018 (2018-06-12) * |
Also Published As
Publication number | Publication date |
---|---|
CN112905267B (zh) | 2024-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11836516B2 (en) | Reducing execution times in an on-demand network code execution system using saved machine states | |
US10514960B2 (en) | Iterative rebalancing of virtual resources among VMs to allocate a second resource capacity by migrating to servers based on resource allocations and priorities of VMs | |
US9952896B2 (en) | Asynchronous task management in an on-demand network code execution environment | |
KR100898315B1 (ko) | 인핸스드 런타임 호스팅 | |
JP5015665B2 (ja) | カーネル間でカーネル・サービスを共用するための方法、装置、およびコンピュータ・プログラム | |
US8935698B2 (en) | Management of migrating threads within a computing environment to transform multiple threading mode processors to single thread mode processors | |
CN110192182B (zh) | 动态和专用的虚拟化图形处理 | |
US10572411B2 (en) | Preventing software thread blocking due to interrupts | |
US20140282507A1 (en) | Systems and methods of using a hypervisor with guest operating systems and virtual processors | |
US20080263553A1 (en) | Dynamic Service Level Manager for Image Pools | |
US20120089967A1 (en) | Dynamic data and compute resource elasticity | |
US20150100967A1 (en) | Resolving deployment conflicts in heterogeneous environments | |
US9703597B2 (en) | Dynamic timeout period adjustment of service requests | |
US9417914B2 (en) | Regaining control of a processing resource that executes an external execution context | |
CN109639460B (zh) | Nfv资源管理的方法和装置 | |
WO2024046017A1 (zh) | 基于容器的进程调度方法、装置、设备及存储介质 | |
CN112905267B (zh) | 虚拟机接入协程库的方法、装置及设备 | |
WO2022237419A1 (zh) | 任务执行方法、装置及存储介质 | |
US9229788B2 (en) | Performing a wait operation to wait for one or more tasks to complete | |
CN115904745A (zh) | 进程间通信方法及相关设备 | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
US8635294B2 (en) | System, method and program product for proactively provisioning emergency computer resources using geospatial relationships | |
EP4155931A1 (en) | Optimized network device queue management for hybrid cloud networking workloads | |
US11023273B2 (en) | Multi-threaded programming | |
Bussler | Multi-Tenancy: A Concept Whose Time Has Come and (Almost) Gone. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |