掌桥专利:专业的专利平台
掌桥专利
首页

协程监控方法、装置、设备及可读存储介质

文献发布时间:2024-04-18 19:59:31


协程监控方法、装置、设备及可读存储介质

技术领域

本申请涉及协程调度技术领域,具体涉及一种协程监控方法、装置、设备及可读存储介质。

背景技术

协程是一种用户态的轻量级线程,协程内部由一个调度器从多个任务队列中按一定调度策略获取任务进行执行,当一个任务完成后,调度器会从任务队列中获取新的任务进行执行。基于上述原理,任务切换时不用切换内核态,并且将操作相同资源的任务放到同一个任务队列就可以实现天然的免锁机制,在保持异步化运行机制的同时,还能用同步的方式写代码,这既实现了高并发,又缩短了开发周期。

但是在实际应用中,往往存在某个任务因任务机制或程序错误等原因,运行时间过长甚至阻塞,导致其他任务得不到调度,而调度器因其实现原理,需要等待正在执行的任务完成后才能对故障进行处理,若发生阻塞,会导致故障扩散,进而阻塞整个协程程序的调度,严重时甚至会使服务不可用。

发明内容

本申请提供一种协程监控方法、装置、设备及可读存储介质,可以解决现有技术中存在的协程中任务运行时间过长影响协程正常运行的技术问题。

第一方面,本申请实施例提供一种协程监控方法,所述协程监控方法包括:

通过监控线程监测每个协程的当前任务的运行时长;

若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程,其中,临时线程用于针对该任务执行超时处理,并在执行完毕后自动销毁。

进一步地,一实施例中,在所述通过监控线程创建临时线程的步骤之后还包括:

通过监控线程监测临时线程的运行时长;

若临时线程的运行时长大于预设线程时长,则通过监控线程销毁临时线程。

进一步地,一实施例中,所述若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程的步骤包括:

若某一协程的当前任务的运行时长大于第一任务时长,则通过监控线程创建第一临时线程,其中,第一临时线程用于将该协程标记为不可用状态。

进一步地,一实施例中,所述若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程的步骤还包括:

若某一协程的当前任务的运行时长大于第二任务时长,则通过监控线程创建第二临时线程,其中,第二任务时长小于第一任务时长,第二临时线程用于将第二任务时长,该任务的运行起始时刻、任务编号、运行时长和调用栈,以及该协程的调度器信息写入日志,并输出告警提示。

进一步地,一实施例中,所述若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程的步骤还包括:

若某一协程的当前任务的运行时长大于第三任务时长,则通过监控线程创建第三临时线程,其中,第三任务时长小于第二任务时长,第三临时线程用于将第三任务时长以及该任务的运行起始时刻、任务编号和运行时长写入日志。

进一步地,一实施例中,每个协程在初始化阶段将调度器信息写入监控线程,并在调度每个任务时将对应任务的运行起始时刻和任务编号写入监控线程。

进一步地,一实施例中,每个协程在调度每个任务时将对应任务的运行起始时刻写入监控线程;

针对每个协程,监控线程根据当前时刻和最新写入的运行起始时刻确定对应协程的当前任务的运行时长。

第二方面,本申请实施例还提供一种协程监控装置,所述协程监控装置包括:

监测模块,用于通过监控线程监测每个协程的当前任务的运行时长;

创建模块,用于若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程,其中,临时线程用于针对该任务执行超时处理,并在执行完毕后自动销毁。

第三方面,本申请实施例还提供一种协程监控设备,所述协程监控设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的协程监控程序,其中所述协程监控程序被所述处理器执行时,实现上述协程监控方法的步骤。

第四方面,本申请实施例还提供一种可读存储介质,所述可读存储介质上存储有协程监控程序,其中所述协程监控程序被处理器执行时,实现上述协程监控方法的步骤。

本申请中,通过监控线程监测每个协程的当前任务的运行时长,相比在协程内部实施监测,监控线程的监测周期不会受到协程调度的影响,通过监控线程创建的临时线程针对超时任务执行超时处理,避免监控线程直接执行超时处理影响监测周期,临时线程在执行完毕后自动销毁以节省资源。通过本申请,对协程中的任务运行时长进行持续稳定的监测,并及时针对超时任务执行超时处理,从而确保协程正常运行。

附图说明

图1为本申请一实施例中协程监控方法的流程示意图;

图2为本申请一实施例中监控线程和协程的时序图;

图3为本申请一实施例中协程的工作流程示意图;

图4为本申请一实施例中监控线程的工作流程示意图;

图5为本申请实施例方案中涉及的协程监控设备的硬件结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

第一方面,本申请实施例提供一种协程监控方法。

图1示出了本申请一实施例中协程监控方法的流程示意图。

参照图1,一实施例中,协程监控方法包括如下步骤:

S11、通过监控线程监测每个协程的当前任务的运行时长;

S12、若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程,其中,临时线程用于针对该任务执行超时处理,并在执行完毕后自动销毁。

具体地,监控线程和其所监控的协程在同一进程内,监控线程根据监控周期定期计算每个协程的当前任务的运行时长,并将其与预设任务时长进行比较,以判断是否存在超时任务,若存在超时任务,则创建用于对其执行超时处理的临时线程,若不存在超时任务,则睡眠至下一监测周期。

本实施例中,通过监控线程监测每个协程的当前任务的运行时长,相比在协程内部实施监测,监控线程的监测周期不会受到协程调度的影响,通过监控线程创建的临时线程针对超时任务执行超时处理,避免监控线程直接执行超时处理影响监测周期,临时线程在执行完毕后自动销毁以节省资源。通过本实施例,对协程中的任务运行时长进行持续稳定的监测,并及时针对超时任务执行超时处理,从而确保协程正常运行。

进一步地,一实施例中,每个协程在调度每个任务时将对应任务的运行起始时刻写入监控线程;

针对每个协程,监控线程根据当前时刻和最新写入的运行起始时刻确定对应协程的当前任务的运行时长。

本实施例中,协程调度任务具体是指协程中的调度器从任务队列中获取要执行的任务,同一协程最新写入监控线程的运行起始时刻即为该协程的当前任务的运行起始时刻,故当前时刻与该运行起始时刻的时间差即为该协程的当前任务的运行时长。

可选地,同一协程新写入监控线程的运行起始时刻会覆盖之前的运行起始时刻,从而减少资源占用。

可选地,预设任务时长可预置于监控线程,并根据实际需求进行修改。预设任务时长也可记录于协程的各任务中,协程在调度每个任务时还将对应任务的预设任务时长写入监控线程。

图2示出了本申请一实施例中监控线程和协程的时序图。

参照图2,一实施例中,在所述通过监控线程创建临时线程的步骤之后还包括:

通过监控线程监测临时线程的运行时长;

若临时线程的运行时长大于预设线程时长,则通过监控线程销毁临时线程。

本实施例中,监控线程在创建临时线程后还会监测临时线程的运行时长,若临时线程的运行时长大于预设线程时长,则表示临时线程出现异常导致超时处理未完成,或者临时线程在完成超时处理后未成功自动销毁。通过监控线程销毁运行时长过长的临时线程,一方面避免该临时线程持续占用资源,另一方面,监控线程在下次监测到超时任务且不存在针对该超时任务的临时线程时,会再次创建新的临时线程,从而确保超时处理正常执行。

可选地,监控线程在创建临时线程时会记录其创建时刻作为其运行起始时刻,对于记录有创建时刻的临时线程,定期监测该临时线程是否存在,若临时线程存在,则根据当前时刻和其创建时刻确定临时线程的运行时长,以判断该临时线程的运行时长是否过长,若不存在,则删除其创建时刻。

具体到图2所示的实施例中,监控线程的第一次和第二次监测结果均为未监测到超时,不执行额外操作。第三次监测结果为监测到任务2超时,创建临时线程1以针对任务2进行超时处理。第四次监测结果为监测到任务2超时,但未监测到临时线程1超时,不执行额外操作。第五次监测结果为监测到任务2超时,且监测到临时线程1超时,销毁临时线程1并创建临时线程2以再次针对任务2进行超时处理。

特别说明,图2中监控线程对于协程任务和临时线程的监测周期是一致的,因此销毁临时线程1和创建临时线程2是在同一监测周期内执行的操作,动作顺序可调换。在其他实施例中,监控线程对于协程任务和临时线程的监测周期也可不一致。即,在临时线程的监测周期内销毁临时线程1,并在下一个协程任务的监测周期内创建临时线程2。

进一步地,一实施例中,所述若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程的步骤包括:

若某一协程的当前任务的运行时长大于第一任务时长,则通过监控线程创建第一临时线程,其中,第一临时线程用于将该协程标记为不可用状态。

在集群中,每个协程都有自己的状态机,up状态(可用状态)的协程可以承担业务,down状态(不可用状态)的协程则不可以承担业务。本实施例中,某一协程的当前任务的运行时长大于第一任务时长,表示该任务超时非常严重,已经影响集群调度,通过将该协程标记为不可用状态,起到隔离作用,防止故障扩散,以提升系统可靠性。

进一步地,一实施例中,所述若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程的步骤还包括:

若某一协程的当前任务的运行时长大于第二任务时长,则通过监控线程创建第二临时线程,其中,第二任务时长小于第一任务时长,第二临时线程用于将第二任务时长,该任务的运行起始时刻、任务编号、运行时长和调用栈,以及该协程的调度器信息写入日志,并输出告警提示。

本实施例中,某一协程的当前任务的运行时长大于第二任务时长,表示该任务超时较为严重,通过将该任务和该协程的相关信息写入日志,用于对问题进行辅助定位,告警提示用于提醒用户尽快进行问题排查。

可选地,调度器信息包括调度器所属线程号、调度器编号、调度器类型、调度器所属进程、任务列表编号等。

图3示出了本申请一实施例中协程的工作流程示意图。

参照图2和图3,一实施例中,每个协程在初始化阶段将调度器信息写入至监控线程,并在调度每个任务时将对应任务的运行起始时刻和任务编号写入至监控线程。

本实施例中,考虑到任务超时后协程可能无响应,导致无法临时获取问题定位所需的相关信息,故提前获取问题定位所需的部分信息,即调度器信息、对应任务的运行起始时刻和任务编号,这些信息在任务执行过程中是不变的,而任务的调用栈用于表征任务的执行进度,在任务执行过程中变化的因此无法提前获取,但可以根据调度器信息中的调度器所属线程号从第三方库(例如unwind pstack)获取。

进一步地,一实施例中,所述若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程的步骤还包括:

若某一协程的当前任务的运行时长大于第三任务时长,则通过监控线程创建第三临时线程,其中,第三任务时长小于第二任务时长,第三临时线程用于将第三任务时长以及该任务的运行起始时刻、任务编号和运行时长写入日志。

本实施例中,某一协程的当前任务的运行时长大于第一任务时长,表示该任务超时不太严重,通过将该任务的基本信息写入日志,用于对问题进行辅助定位。

图4示出了本申请一实施例中监控线程的工作流程示意图。图4中,T

参照图4,一实施例中,单个监测周期内根据T

第二方面,本申请实施例还提供一种协程监控装置。一实施例中,协程监控装置包括:

监测模块,用于通过监控线程监测每个协程的当前任务的运行时长;

创建模块,用于若某一协程的当前任务的运行时长大于预设任务时长,则通过监控线程创建临时线程,其中,临时线程用于针对该任务执行超时处理,并在执行完毕后自动销毁。

进一步地,一实施例中,监控模块还用于通过监控线程监测临时线程的运行时长;

协程监控装置还包括销毁模块,用于若临时线程的运行时长大于预设线程时长,则通过监控线程销毁临时线程。

进一步地,一实施例中,创建模块用于:

若某一协程的当前任务的运行时长大于第一任务时长,则通过监控线程创建第一临时线程,其中,第一临时线程用于将该协程标记为不可用状态。

进一步地,一实施例中,创建模块还用于:

若某一协程的当前任务的运行时长大于第二任务时长,则通过监控线程创建第二临时线程,其中,第二任务时长小于第一任务时长,第二临时线程用于将第二任务时长,该任务的运行起始时刻、任务编号、运行时长和调用栈,以及该协程的调度器信息写入日志,并输出告警提示。

进一步地,一实施例中,创建模块还用于:

若某一协程的当前任务的运行时长大于第三任务时长,则通过监控线程创建第三临时线程,其中,第三任务时长小于第二任务时长,第三临时线程用于将第三任务时长以及该任务的运行起始时刻、任务编号和运行时长写入日志。

进一步地,一实施例中,每个协程在初始化阶段将调度器信息写入监控线程,并在调度每个任务时将对应任务的运行起始时刻和任务编号写入监控线程。

进一步地,一实施例中,每个协程在调度每个任务时将对应任务的运行起始时刻写入监控线程;

针对每个协程,监控线程根据当前时刻和最新写入的运行起始时刻确定对应协程的当前任务的运行时长。

其中,上述协程监控装置中各个模块的功能实现与上述协程监控方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。

第三方面,本申请实施例提供一种协程监控设备,协程监控设备可以是个人计算机(personal computer,PC)、笔记本电脑、服务器等具有数据处理功能的设备。

图5示出了本申请实施例方案中涉及的协程监控设备的硬件结构示意图。

参照图5,本申请实施例中,协程监控设备可以包括处理器、存储器、通信接口以及通信总线。

其中,通信总线可以是任何类型的,用于实现处理器、存储器以及通信接口互连。

通信接口包括输入/输出(input/output,I/O)接口、物理接口和逻辑接口等用于实现协程监控设备内部的器件互连的接口,以及用于实现协程监控设备与其他设备(例如其他计算设备或用户设备)互连的接口。物理接口可以是以太网接口、光纤接口、ATM接口等;用户设备可以是显示屏(Display)、键盘(Keyboard)等。

存储器可以是各种类型的存储介质,例如随机存取存储器(random accessmemory,RAM)、只读存储器(read-only memory,ROM)、非易失性RAM(non-volatile RAM,NVRAM)、闪存、光存储器、硬盘、可编程ROM(programmable ROM,PROM)、可擦除PROM(erasable PROM,EPROM)、电可擦除PROM(electrically erasable PROM,EEPROM)等。

处理器可以是通用处理器,通用处理器可以调用存储器中存储的协程监控程序,并执行本申请实施例提供的协程监控方法。例如,通用处理器可以是中央处理器(centralprocessing unit,CPU)。其中,协程监控程序被调用时所执行的方法可参照本申请协程监控方法的各个实施例,此处不再赘述。

本领域技术人员可以理解,图5中示出的硬件结构并不构成对本申请的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

第四方面,本申请实施例还提供一种可读存储介质。

本申请可读存储介质上存储有协程监控程序,其中所述协程监控程序被处理器执行时,实现如上述的协程监控方法的步骤。

其中,协程监控程序被执行时所实现的方法可参照本申请协程监控方法的各个实施例,此处不再赘述。

需要说明的是,上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

本申请的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。术语“第一”、“第二”和“第三”等描述,是用于区分不同的对象等,其不代表先后顺序,也不限定“第一”、“第二”和“第三”是不同的类型。

在本申请实施例的描述中,“示例性的”、“例如”或者“举例来说”等用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”、“例如”或者“举例来说”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”、“例如”或者“举例来说”等词旨在以具体方式呈现相关概念。

在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;文本中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,另外,在本申请实施例的描述中,“多个”是指两个或多于两个。

在本申请实施例描述的一些流程中,包含了按照特定顺序出现的多个操作或步骤,但是应该理解,这些操作或步骤可以不按照其在本申请实施例中出现的顺序来执行或并行执行,操作的序号仅用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作或步骤可以按顺序执行或并行执行,并且这些操作或步骤可以进行组合。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本申请各个实施例所述的方法。

以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

相关技术
  • 具有凹口、切削刀片的工具承载架及其制造方法
  • 一种刀片、刀具、切削方法及切削设备
  • 切削刀片、能够装接该切削刀片的工具主体及具备该切削刀片和工具主体的刀头更换式球头立铣刀
  • 切削刀片、能够装接该切削刀片的工具主体及具备该切削刀片和工具主体的刀头更换式球头立铣刀
技术分类

06120116523826