CN117032844A - 一种协程链路追踪装置、方法及智能车辆 - Google Patents
一种协程链路追踪装置、方法及智能车辆 Download PDFInfo
- Publication number
- CN117032844A CN117032844A CN202311286596.1A CN202311286596A CN117032844A CN 117032844 A CN117032844 A CN 117032844A CN 202311286596 A CN202311286596 A CN 202311286596A CN 117032844 A CN117032844 A CN 117032844A
- Authority
- CN
- China
- Prior art keywords
- coroutine
- cooperative
- coroutines
- level
- sub
- 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 98
- 230000006870 function Effects 0.000 claims description 38
- 238000004590 computer program Methods 0.000 claims description 22
- 230000008569 process Effects 0.000 abstract description 44
- 238000010586 diagram Methods 0.000 description 12
- 230000003287 optical effect Effects 0.000 description 5
- 230000002159 abnormal effect Effects 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
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/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及到软件技术领域,具体公开了一种协程链路追踪装置、方法及智能车辆,用以解决当前协程运行过程中无法对存在问题的协程进行准确以及及时定位的问题。该装置用于在接收到协程追踪指令时,获取各个协程的协程标识;根据各个协程的协程标识,确定各个协程之间的父子级关系;根据各个协程之间的父子级关系,生成链路追踪结果。因此通过该装置,在协程中添加协程标识来对协程的调用关系进行追踪,从而可以及时的在链路追踪结果中确定出各个相关的协程,并且确定协程之间的调用关系。
Description
技术领域
本申请涉及软件技术领域,尤其涉及一种协程链路追踪装置、方法及智能车辆。
背景技术
随着计算机技术的不断发展,各种计算编程语言也不断被推出,golang编程语言也逐渐被应用到各种软件编程中,golang的语法简单清晰,并且支持多范式编程,这种多范式编程使得golang可以在不同场景下进行应用。
在使用golang语言框架进行业务开发时,尤其是进行多协程并发编程,可以使用go关键字方便的开启一个协程,在协程中编写业务逻辑,由于这种低成本并且方便的效果,在编程过程中会同时运行大量的协程,由于协程是同时运行,因此无法对并发的协程内的日志打印,从而也无法对存在问题的协程进行准确以及及时的定位。
发明内容
本发申请提供了一种协程链路追踪装置、方法及智能车辆,用以通过在协程中添加协程标识来对协程的调用关系进行追踪,从而可以及时的在链路追踪结果中确定出各个相关的协程,并且确定协程之间的调用关系。
第一方面,本申请提供了一种协程链路追踪装置,包括处理器和存储器,所述存储器用于存储所述处理器可执行的程序,所述处理器用于读取所述存储器中的程序并执行如下步骤:
在接收到协程追踪指令时,获取各个协程的协程标识,其中,所述协程标识为指示协程的父级协程的标识;
根据各个协程的协程标识,确定各个协程之间的父子级关系;
根据各个协程之间的父子级关系,生成链路追踪结果,其中,所述链路追踪结果包含了各个协程相互之间的关联关系。
通过上述的装置,最终能够得到各个协程的链路追踪结果,在某一个协程出现异常时,可以及时的在链路追踪结果中确定出各个相关的协程,并且确定协程之间的调用关系,从而准确的定位出异常的协程,进而提升了定位问题的效率。
在一种可选的实施例中,所述处理器具体被配置为执行:
在启动主协程,并确定所述主协程创建第一级子协程时,确定所述主协程中的第一协程标识;
将所述第一协程标识添加到所述第一级子协程中。
通过该方式可以准确的建立主协程与子协程之间链路关系。
在一种可选的实施例中,所述处理器具体被配置为执行:
根据各个协程之间的父子级关系,生成包含各个协程的关系链路;
将所述关系链路作为所述链路追踪结果。
在一种可选的实施例中,所述处理器具体被配置为执行:
通过第一设定函数调取所述主协程的所述第一协程标识;
调取第二设定函数将所述第一协程标识添加到所述第一级子协程中。
通过第二设定函数获取协程标识的方式,不仅可以极大的减少代码编写过程中的工作量,并且也提升了协程之间调用关系的准确性。
在一种可选的实施例中,所述处理器具体被配置为执行:
在确定所述第一级子协程下创建第二级子协程时,在所述第一级子协程中确定出第二协程标识;
将所述第二协程标识添加到所述第二级子协程中。
按照上述的方式,可以建立主协程以及每一级子协程之间链路关系。
第二方面,本申请实施例提供了一种协程链路追踪方法,所述方法包括:
在接收到协程追踪指令时,获取各个协程的协程标识,其中,所述协程标识为指示协程的父级协程的标识;
根据各个协程的协程标识,确定各个协程之间的父子级关系;
根据各个协程之间的父子级关系,生成链路追踪结果,其中,所述链路追踪结果包含了各个协程相互之间的关联关系。
在一种可选的实施例中,在获取各个协程的协程标识之前,所述方法还包括:
在启动主协程,并确定所述主协程创建第一级子协程时,确定所述主协程中的第一协程标识;
将所述第一协程标识添加到所述第一级子协程中。
在一种可选的实施例中,所述根据各个协程之间的父子级关系,生成链路追踪结果,包括:
根据各个协程之间的父子级关系,生成包含各个协程的关系链路;
将所述关系链路作为所述链路追踪结果。
第三方面,本申请提供了一种智能车辆,所述智能车辆包括上述的一种协程链路追踪装置。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现上述的一种协程链路追踪方法。
附图说明
图1为本申请提供的一种协程链路追踪装置结构示意图;
图2为本申请提供的主协程与第一级子协程之间的链路关系示意图;
图3为本申请提供的主协程、第一级子协程以及第二级子协程之间的链路关系示意图;
图4为本申请提供的主协程与各个协程之间的关系示意图;
图5本申请提供的主协程与各个协程之间的链路关系示意图;
图6为本申请提供的一种协程链路追踪方法的流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本发明实施例描述的应用场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
当前,对于编程技术来讲,为了保证各个软件的可扩展性以及实用性,因此当前提供了不同的计算编程语言,从而各种计算编程语言也不断被推出,而golang编程语言作为一种语法简单清晰,并且支持多范式编程,进而golang编程语言也逐渐被应用到各种软件编程中,由于golang编程语言的多范式编程使得golang可以在不同场景下进行应用。
在使用golang语言框架进行业务开发时,尤其是进行多协程并发编程,可以使用go关键字方便的开启一个协程,在协程中编写业务逻辑,由于这种低成本并且方便的效果,在编程过程中会同时运行大量的协程,由于协程是同时运行,因此无法对并发的协程内的日志打印,从而也无法对存在问题的协程进行准确以及及时的定位。
基于上述的问题,本申请提供了一种协程链路追踪装置,参照图1所示为本申请实施例提供的一种协程链路追踪装置结构示意图,该装置包括处理器10以及存储器11,存储器11用于存储处理器10可执行程序,处理器10用于读取存储器11中的程序并执行如下步骤:
在接收到协程追踪指令时,获取各个协程的协程标识;
根据各个协程的协程标识,确定各个协程之间的父子级关系;
根据各个协程之间的父子级关系,生成链路追踪结果。
具体来讲,在本申请实施例中,协程是golang编程语言中的轻量级线程实现,程序运行过程中的一个任务或者是一个功能会通过多个协程来完成,并且多个协程之间会同步运行。
因此,若是要实现对协程的追踪,则需要确定各个协程之间的关系。在本申请实施例中,在程序启动时,由一个主协程初始化启动,并且通过该主协程执行业务逻辑代码。
若是业务逻辑代码中使用了go关键字启动一个新的协程进行业务处理,此时将无法确定新的协程为由主协程创建,还是由其他子协程创建。为了解决该问题,因此在主协程初始化启动之前,将通过第一设定函数在主协程代码中添加第一协程标识,该第一协程标识是唯一标识。
这里需要说明是,该第一设定函数可以是golang编程语言中的runtime/pprof.runtime_setProfLabel函数,在该主协程的代码中加入该函数之后,就可以通过该函数在主协程的代码中设置第一协程标识。
在主协程的第一协程标识设置完成之后,启动运行该主协程,若是在该主协程运行过程中确定该主协程创建了一个子协程,则通过第二设定函数确定该主协程中的第一协程标识。在本申请实施例中,该第二设定函数可以是golang编程语言中的runtime/pprof.runtime_getprofLabel。
这里需要说明是,主协程下直接创建的每个子协程为第一级子协程,若是在第一级子协程下再创建子协程,则确定为第二级子协程,以此方式可以确定各个子协程的级别。
在提取出主协程中的第一协程标识之后,将通过第一设定函数将第一协程标识添加到新创建的第一级子协程中。从而在该第一级子协程中就包含了主协程的第一协程标识。
在新创建的第一级子协程中添加了第一协程标识之后,主协程与新创建的第一级子协程之间就存在了父子级关系,也就是该主协程为父级协程,而在该主协程下创建的第一级子协程为子级协程。从该父子级关系中就可以得到一个对应的链路结果。
当然,在本申请实施例中,一个主协程下可以创建多个第一级子协程,而每个第一级子协程都将按照上述的方法添加主协程的第一协程标识。从而形成主协程与第一级子协程之间的链路关系,比如说图2所示,该图2中该主协程下创建了N个第一级子协程,而每个第一级子协程中都包含了主协程的第一协程标识,因此就可以形成图2所示的链路关系。
进一步,在本申请实施例中,若是在该新创建的第一级子协程下继续创建一个第二级子协程,此时将一级子协程中的第一协程标识更新为第二协程标识,然后通过第一设定函数将第二协程标识添加到第二级子协程中,并且在第一级子协程中会记录第一协程标识以及第二协程标识。比如图3所示,在图3中,主协程下创建了N个第一级子协程,主协程的第一协程标识为a,主协程下的第一级子协程下创建2个第二级子协程,此时第一级子协程将第一协程标识a更新为第二协程标识a1,然后将该第二协程标识a1添加到第二级子协程,在第一级子协程中会记录第一协程标识a以及第二协程标识a1。
当然,除了上述方式之外,还可以通过其他方式来对子协程添加协程标识,比如说,当第一级子协程中添加了主协程的协程标识之后,在第一级子协程中设定第二级子协程的第二协程标识,然后将设定的第二协程标识添加到第二级子协程中,此时第一级子协程自身的协程标识不需要进行更新,而是直接将设定的第二协程标识复制给第二级子协程。通过该方式可以更加快捷简便的设置各级子协程的协程标识。
进一步,在本申请实施例中,若是接收到针对协程的协程追踪指令时,首先会获取到各个协程的协程标识,各个协程的协程标识可以通过第二设定函数获取。在获取到各个协程的协程标识之后,可以根据各个协程的协程标识,确定各个协程之间的父子级关系。
具体来讲,除了主协程之外,各个子协程的协程标识都来自于上一级协程,比如说,第一级子协程的协程标识来自于主协程,第二级子协程的协程标识来自于第一级子协程,因此通过协程标识就可以确定每个协程为第一级子协程还是第二级子协程。
这里需要说明是,每个子协程中的协程标识都是父级协程的协程标识,从而每个子协程中都可以定位出对应的父级协程。从而通过上述的方式就可以确定出各个协程之间的父子级关系。通过该父子级关系就能够生成各个协程之间的关系链路。
比如图4所示,主协程的第一协程标识为10,在主协程下创建了N个第一级子协程之后,第一级子协程中的每个子协程将添加第一协程标识10,此时就可以根据第一协程标识确定出第一级子协程对应的父级协程为主协程。因此存在第一协程标识的所有协程都被确定为主协程的第一级子协程。在图4中,协程1-K中的协程标识都是10,因此协程1-K都是主协程的第一级子协程。
进一步,在图4中协程x1和协程x2的协程标识为第二协程标识20,此时在各个第一级子协程中确定是否记录了第二协程标识20,若是某一个第一级子协程中记录了第二协程标识20,则协程x1和协程x2将被确定为该第一级子协程的第二级子协程,在确定出各个协程之间父子级关系之后,将各个由主协程、第一级子协程、第二级子协程组成的父子级关系,在该父子级关系中可以确定出各个协程之间的关联关系。
在确定各个协程之间的父子级关系之后,根据该父子级关系,生成链路追踪结果,在该链路追踪结果中包含了各个协程之间的关联关系。
比如图5所示的包含各个协程的父子级关系,在该父子级关系中已经确定了各个协程之间的关联关系,从而可以生成包含各个协程的关系链路,该关系链路将作为最终的链路追踪结果。
这里需要说明是,该链路追踪结果可以是从主协程到各级子协程之间的链路关系,也可以是各级子协程到主协程之间的链路关系。在本申请实施例中不限定具体的链路结构。
通过最终得到的链路追踪结果,在某一个协程出现异常时,可以及时的在链路追踪结果中确定出各个相关的协程,并且确定协程之间的调用关系,从而准确的定位出异常的协程,进而提升了定位问题的效率。
另外,在本申请实施例中,各个协程中的协程标识是通过第二设定函数进行获取,而第二设定函数并不需要在协程的代码编写过程中反复写入,而当前为了明确协程之间的调用关系,因此需要在每个协程的代码编写过程中反复写入协程之间的父子级调用关系,这样不仅导致的工作量较大,并且也会导致调用关系的写入错误。因此本申请实施例中通过第二设定函数获取协程标识的方式,不仅可以极大的减少代码编写过程中的工作量,并且也提升了协程之间调用关系的准确性。
基于同一发明构思,在本申请实施例中还提供了一种地图数据显示方法,参照图6所示,该方法包括:
S601,在接收到协程追踪指令时,获取各个协程的协程标识;
S602,根据各个协程的协程标识,确定各个协程之间的父子级关系;
S603,根据各个协程之间的父子级关系,生成链路追踪结果。
具体来讲,在本申请实施例中,协程是golang编程语言中的轻量级线程实现,程序运行过程中的一个任务或者是一个功能会通过多个协程来完成,并且多个协程之间会同步运行。
因此,若是要实现对协程的追踪,则需要确定各个协程之间的关系。在本申请实施例中,在程序启动时,由一个主协程初始化启动,并且通过该主协程执行业务逻辑代码。
若是业务逻辑代码中使用了go关键字启动一个新的协程进行业务处理,此时将无法确定新的协程为由主协程创建,还是由其他子协程创建。为了解决该问题,因此在主协程初始化启动之前,将通过第一设定函数在主协程代码中添加第一协程标识,该第一协程标识是唯一标识。
这里需要说明是,该第一设定函数可以是golang编程语言中的runtime/pprof.runtime_setProfLabel函数,在该主协程的代码中加入该函数之后,就可以通过该函数在主协程的代码中设置第一协程标识。
在主协程的第一协程标识设置完成之后,启动运行该主协程,若是在该主协程运行过程中确定该主协程创建了一个子协程,则通过第二设定函数确定该主协程中的第一协程标识。在本申请实施例中,该第二设定函数可以是golang编程语言中的runtime/pprof.runtime_getprofLabel。
这里需要说明是,主协程下创建直接创建的每个子协程为第一级子协程,若是在第一级子协程下再创建的子协程,则确定为第二级子协程,以此方式可以确定各个子协程的级别。
在提取出主协程中的第一协程标识之后,将通过第一设定函数将第一协程标识添加到新创建的第一级子协程中。从而在该第一级子协程中就包含了主协程的第一协程标识。
在新创建的第一级子协程中添加了第一协程标识之后,主协程与新创建的第一级子协程之间就存在了父子级关系,也就是该主协程为父级协程,而在该主协程下创建的第一级子协程为子级协程。从该父子级关系中就可以得到一个对应的链路结果。
当然,在本申请实施例中,一个主协程下可以创建多个第一级子协程,而每个第一级子协程都将按照上述的方法添加主协程的第一协程标识。从而形成主协程与第一级子协程之间的链路关系,比如说图2所示,该图2中该主协程下创建了N个第一级子协程,而每个第一级子协程中都包含了主协程的第一协程标识,因此就可以形成图2所示的链路关系。
进一步,在本申请实施例中,若是在该新创建的第一级子协程下继续创建一个第二级子协程,此时将一级子协程中的第一协程标识更新为第二协程标识,然后通过第一设定函数将第二协程标识添加到第二级子协程中,并且在第一级子协程中会记录第一协程标识以及第二协程标识。比如图3所示,在图3中,主协程下创建了N个第一级子协程,主协程的第一协程标识为a,主协程下的第一级子协程下创建2个第二级子协程,此时第一级子协程将第一协程标识a更新为第二协程标识a1,然后将该第二协程标识a1添加到第二级子协程,在第一级子协程中会记录第一协程标识a以及第二协程标识a1。
当然,除了上述方式之外,还可以通过其他方式来对子协程添加协程标识,比如说,当第一级子协程中添加了主协程的协程标识之后,在第一级子协程中设定第二级子协程的第二协程标识,然后将设定的第二协程标识添加到第二级子协程中,此时第一级子协程自身的协程标识不需要进行更新,而是直接将设定的第二协程标识复制给第二级子协程。通过该方式可以更加快捷简便的设置各级子协程的协程标识。
进一步,在本申请实施例中,若是接收到针对协程的协程追踪指令时,首先会获取到各个协程的协程标识,各个协程的协程标识可以通过第二设定函数获取。在获取到各个协程的协程标识之后,可以根据各个协程的协程标识,确定各个协程之间的父子级关系。
具体来讲,除了主协程之外,各个子协程的协程标识都来自于上一级协程,比如说,第一级子协程的协程标识来自于主协程,第二级子协程的协程标识来自于第一级子协程,因此通过协程标识就可以确定每个协程为第一级子协程还是第二级子协程。
这里需要说明是,每个子协程中的协程标识都是父级协程的协程标识,从而每个子协程中都可以定位出对应的父级协程。从而通过上述的方式就可以确定出各个协程之间的父子级关系。通过该父子级关系就能够生成各个协程之间的关系链路。
比如图4所示,主协程的第一协程标识为10,在主协程下创建了N个第一级子协程之后,第一级子协程中的每个子协程将添加第一协程标识10,此时就可以根据第一协程标识确定出第一级子协程对应的父级协程为主协程。因此存在第一协程标识的所有协程都被确定为主协程的第一级子协程。在图4中,协程1-K中的协程标识都是10,因此协程1-K都是主协程的第一级子协程。
进一步,在图4中协程x1和协程x2的协程标识为第二协程标识20,此时在各个第一级子协程中确定是否记录了第二协程标识20,若是某一个第一级子协程中记录了第二协程标识20,则协程x1和协程x2将被确定为该第一级子协程的第二级子协程,在确定出各个协程之间父子级关系之后,将各个由主协程、第一级子协程、第二级子协程组成的父子级关系,在该父子级关系中可以确定出各个协程之间的关联关系。
在确定各个协程之间的父子级关系之后,根据该父子级关系,生成链路追踪结果,在该链路追踪结果中包含了各个协程之间的关联关系。
比如图5所示的包含各个协程的父子级关系,在该父子级关系中已经确定了各个协程之间的关联关系,从而可以生成包含各个协程的关系链路,该关系链路将作为最终的链路追踪结果。
这里需要说明是,该链路追踪结果可以是从主协程到各级子协程之间的链路关系,也可以是各级子协程到主协程之间的链路关系。在本申请实施例中不限定具体的链路结构。
通过最终得到的链路追踪结果,在某一个协程出现异常时,可以及时的在链路追踪结果中确定出各个相关的协程,并且确定协程之间的调用关系,从而准确的定位出异常的协程,进而提升了定位问题的效率。
另外,在本申请实施例中,各个协程中的协程标识是通过第二设定函数进行获取,而第二设定函数并不需要在协程的代码编写过程中反复写入,而当前为了明确协程之间的调用关系,因此需要在每个协程的代码编写过程中反复写入协程之间的父子级调用关系,这样不仅导致的工作量较大,并且也会导致调用关系的写入错误。因此本申请实施例中通过第二设定函数获取协程标识的方式,不仅可以极大的减少代码编写过程中的工作量,并且也提升了协程之间调用关系的准确性。
基于同一发明构思,本申请实施例提供了一种智能车辆,该智能车辆包括上述的一种协程链路追踪装置,此处的装置在上述的实施例中已经详细说明,此处就不再赘述。
基于同一发明构思,本公开实施例提供一种计算机存储介质,计算机存储介质包括:计算机程序代码,当计算机程序代码在计算机上运行时,使得计算机执行如前文论述任一的一种协程链路追踪方法。由于上述计算机存储介质解决问题的原理与一种协程链路追踪方法相似,因此上述计算机存储介质的实施可以参见方法的实施,重复之处不再赘述。
在具体的实施过程中,计算机存储介质可以包括:通用串行总线闪存盘(USB,Universal Serial Bus Flash Drive)、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的存储介质。
基于同一发明构思,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行如前文论述任一的一种协程链路追踪方法。由于上述计算机程序产品解决问题的原理与一种协程链路追踪方法相似,因此上述计算机程序产品的实施可以参见方法的实施,重复之处不再赘述。
计算机程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本申请中的方法可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序或指令。在计算机上加载和执行所述计算机程序或指令时,全部或部分地执行本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备、核心网设备、OAM或者其它可编程装置。
所述计算机程序或指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序或指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是集成一个或多个可用介质的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,例如,软盘、硬盘、磁带;也可以是光介质,例如,数字视频光盘;还可以是半导体介质,例如,固态硬盘。该计算机可读存储介质可以是易失性或非易失性存储介质,或可包括易失性和非易失性两种类型的存储介质。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的设备。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令设备的制造品,该指令设备实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种协程链路追踪装置,其特征在于,包括处理器和存储器,所述存储器用于存储所述处理器可执行的程序,所述处理器用于读取所述存储器中的程序并执行如下步骤:
在接收到协程追踪指令时,获取各个协程的协程标识,其中,所述协程标识为指示协程的父级协程的标识;
根据各个协程的协程标识,确定各个协程之间的父子级关系;
根据各个协程之间的父子级关系,生成链路追踪结果,其中,所述链路追踪结果包含了各个协程相互之间的关联关系。
2.如权利要求1所述的装置,其特征在于,所述处理器具体被配置为执行:
在启动主协程,并确定所述主协程创建第一级子协程时,确定所述主协程中的第一协程标识;
将所述第一协程标识添加到所述第一级子协程中。
3.如权利要求1所述的装置,其特征在于,所述处理器具体被配置为执行:
根据各个协程之间的父子级关系,生成包含各个协程的关系链路;
将所述关系链路作为所述链路追踪结果。
4.如权利要求2所述的装置,其特征在于,所述处理器具体被配置为执行:
通过第一设定函数调取所述主协程的所述第一协程标识;
调取第二设定函数将所述第一协程标识添加到所述第一级子协程中。
5.如权利要求2所述的装置,其特征在于,所述处理器具体被配置为执行:
在确定所述第一级子协程下创建第二级子协程时,在所述第一级子协程中确定出第二协程标识;
将所述第二协程标识添加到所述第二级子协程中。
6.一种协程链路追踪方法,其特征在于,所述方法包括:
在接收到协程追踪指令时,获取各个协程的协程标识,其中,所述协程标识为指示协程的父级协程的标识;
根据各个协程的协程标识,确定各个协程之间的父子级关系;
根据各个协程之间的父子级关系,生成链路追踪结果,其中,所述链路追踪结果包含了各个协程相互之间的关联关系。
7.如权利要求6所述的方法,其特征在于,在获取各个协程的协程标识之前,所述方法还包括:
在启动主协程,并确定所述主协程创建第一级子协程时,确定所述主协程中的第一协程标识;
将所述第一协程标识添加到所述第一级子协程中。
8.如权利要求6所述的方法,其特征在于,所述根据各个协程之间的父子级关系,生成链路追踪结果,包括:
根据各个协程之间的父子级关系,生成包含各个协程的关系链路;
将所述关系链路作为所述链路追踪结果。
9.一种智能车辆,其特征在于,所述智能车辆包括如权利要求1-5中任一项所述的装置。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现权利要求6-8中的任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311286596.1A CN117032844B (zh) | 2023-10-07 | 2023-10-07 | 一种协程链路追踪装置、方法及智能车辆 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311286596.1A CN117032844B (zh) | 2023-10-07 | 2023-10-07 | 一种协程链路追踪装置、方法及智能车辆 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117032844A true CN117032844A (zh) | 2023-11-10 |
CN117032844B CN117032844B (zh) | 2024-01-09 |
Family
ID=88641414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311286596.1A Active CN117032844B (zh) | 2023-10-07 | 2023-10-07 | 一种协程链路追踪装置、方法及智能车辆 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117032844B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017063521A1 (zh) * | 2015-10-15 | 2017-04-20 | 中兴通讯股份有限公司 | 协程监控方法及装置 |
CN111078119A (zh) * | 2018-10-18 | 2020-04-28 | 深信服科技股份有限公司 | 一种数据重建方法、系统、装置及计算机可读存储介质 |
CN113485840A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 基于Go语言的多任务并行处理装置及方法 |
WO2022042127A1 (zh) * | 2020-08-24 | 2022-03-03 | 华为技术有限公司 | 一种协程切换的方法、装置及设备 |
CN114398179A (zh) * | 2022-01-14 | 2022-04-26 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
CN115037738A (zh) * | 2022-05-26 | 2022-09-09 | 浪潮金融信息技术有限公司 | 一种基于协程处理的文件下载方法、系统及介质 |
WO2023065847A1 (zh) * | 2021-10-18 | 2023-04-27 | 易保网络技术(上海)有限公司 | 计算逻辑的处理方法、电子设备和可读存储介质 |
CN116795506A (zh) * | 2023-05-24 | 2023-09-22 | 北京云杉世纪网络科技有限公司 | 一种协程调用追踪方法、系统、设备及可读存储介质 |
-
2023
- 2023-10-07 CN CN202311286596.1A patent/CN117032844B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017063521A1 (zh) * | 2015-10-15 | 2017-04-20 | 中兴通讯股份有限公司 | 协程监控方法及装置 |
CN111078119A (zh) * | 2018-10-18 | 2020-04-28 | 深信服科技股份有限公司 | 一种数据重建方法、系统、装置及计算机可读存储介质 |
WO2022042127A1 (zh) * | 2020-08-24 | 2022-03-03 | 华为技术有限公司 | 一种协程切换的方法、装置及设备 |
CN113485840A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 基于Go语言的多任务并行处理装置及方法 |
WO2023065847A1 (zh) * | 2021-10-18 | 2023-04-27 | 易保网络技术(上海)有限公司 | 计算逻辑的处理方法、电子设备和可读存储介质 |
CN114398179A (zh) * | 2022-01-14 | 2022-04-26 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
CN115037738A (zh) * | 2022-05-26 | 2022-09-09 | 浪潮金融信息技术有限公司 | 一种基于协程处理的文件下载方法、系统及介质 |
CN116795506A (zh) * | 2023-05-24 | 2023-09-22 | 北京云杉世纪网络科技有限公司 | 一种协程调用追踪方法、系统、设备及可读存储介质 |
Non-Patent Citations (3)
Title |
---|
CHEN ZHANG: "Coroutine Exception Handling& Observability with Firebase", KOTLIN COROUTINES&FIREBASE CRASHLYTICS * |
董昭通等: "面向大数据的分布式缓存设计", 通信技术, no. 01 * |
黄文亮等: "Kotlin协程技术在网络开发中的应用", 现代计算机(专业版), no. 33 * |
Also Published As
Publication number | Publication date |
---|---|
CN117032844B (zh) | 2024-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107644286B (zh) | 工作流处理方法及装置 | |
CN107015853B (zh) | 多阶段任务的实现方法和装置 | |
WO2018000607A1 (zh) | 一种识别测试用例失败原因的方法及电子设备 | |
CN108804299A (zh) | 应用程序异常处理方法及装置 | |
CN106375360B (zh) | 一种图数据更新方法、装置及系统 | |
CN110032568B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
CN112905441A (zh) | 测试用例生成方法、测试方法、装置及设备 | |
CN110941632A (zh) | 一种数据库审计方法、装置及设备 | |
CN111553652B (zh) | 业务处理方法及装置 | |
CN110633258B (zh) | 日志插入方法、装置、计算机装置及存储介质 | |
CN111435367A (zh) | 知识图谱的构建方法、系统、设备及存储介质 | |
CN113923268B (zh) | 一种针对多版本通信规约的解析方法、设备及存储介质 | |
CN111382315A (zh) | 子图同构匹配结果的合并方法、电子设备及存储介质 | |
CN111625330B (zh) | 跨线程的任务处理方法、装置、服务器及存储介质 | |
CN111026371B (zh) | 一种游戏开发方法、装置、电子设备及存储介质 | |
CN117032844B (zh) | 一种协程链路追踪装置、方法及智能车辆 | |
CN111125332B (zh) | 计算词的tf-idf值的方法、装置、设备及存储介质 | |
CN109857716B (zh) | 系统交互日志记录方法、装置及存储介质、服务器 | |
CN113542323B (zh) | 业务处理方法、装置、设备及计算机可读存储介质 | |
CN115033590A (zh) | 一种多域数据融合的方法、装置和存储介质 | |
CN110221952B (zh) | 业务数据的处理方法及装置、业务数据处理系统 | |
CN113010398A (zh) | 一种业务日志模型、业务执行方法、装置、电子设备和介质 | |
CN111400245A (zh) | 美术资源迁移方法及装置 | |
CN117081976B (zh) | 网关路由的配置方法及其装置 | |
CN111726373B (zh) | 通信链路构建方法、装置和设备 |
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 |