CN111813636A - 软件模块间通信资源的使用时间监控方法、装置及介质 - Google Patents
软件模块间通信资源的使用时间监控方法、装置及介质 Download PDFInfo
- Publication number
- CN111813636A CN111813636A CN202010915084.7A CN202010915084A CN111813636A CN 111813636 A CN111813636 A CN 111813636A CN 202010915084 A CN202010915084 A CN 202010915084A CN 111813636 A CN111813636 A CN 111813636A
- Authority
- CN
- China
- Prior art keywords
- message
- node
- ring
- nth
- anchor
- 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
- 238000004891 communication Methods 0.000 title claims abstract description 118
- 238000012544 monitoring process Methods 0.000 title claims abstract description 78
- 238000000034 method Methods 0.000 title claims abstract description 66
- 230000002457 bidirectional effect Effects 0.000 claims abstract description 71
- 238000012545 processing Methods 0.000 claims abstract description 37
- 230000006870 function Effects 0.000 claims description 38
- 230000001960 triggered effect Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 6
- 238000007781 pre-processing Methods 0.000 claims description 5
- 230000003111 delayed effect Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 11
- 238000010586 diagram Methods 0.000 description 7
- 238000011084 recovery Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种软件模块间通信资源的使用时间监控方法、装置及计算机可读存储介质。其中,方法包括构建多个作为双向环状链表锚节点的节点结构体变量,作为消息节点且包括节点类型和状态标志的消息结构体。源模块将封装为消息结构体、状态标志为使用状态的消息发送给目标模块,并将该消息节点插入第一锚节点所在环。目标模块处理完消息后调用预先构建的回调函数释放该消息。源模块每隔预设时间触发定时任务,若双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若第N个环上不存在消息节点,则将各环的消息节点移动至相邻的下一个环中,实现对软件模块间通信资源使用时间的有效监控,及时回收通信资源。
Description
技术领域
本申请涉及软件研发技术领域,特别是涉及一种软件模块间通信资源的使用时间监控方法、装置及计算机可读存储介质。
背景技术
软件开发都会遵循模块化思想,也就是将软件划分成具有不同的功能或职责的多个模块,每个模块都可以独立地开发,最后组装成一个完整的软件。每个模块都相对独立且只实现软件的一个子功能,在软件研发及测试过程,每个模块都会对外提供接口以供其它模块调用,来实现模块间的交互,最终使软件能正常工作。
而模块间交互时,往往伴随着通信资源的使用和回收。通信资源的使用是指当模块A向模块B发送消息时,模块A先分配一个用于通信的消息体,这个消息体就是资源,实质上是一块内存区域,消息体中存放着模块A发送给模块B的数据。通信资源的回收是指当模块B处理完消息体中的数据后,要将消息体释放掉。这样被释放的消息体就可以用于下一次的模块间通信。
相关技术中对通信资源是否被及时回收并不作任何处理,也就是说,模块B在处理完模块A的消息体中的数据后,不会及时释放掉该消息体。而若模块A向模块B发送了大量消息,就会使用大量的资源,但是模块B一直没有将资源回收,那么模块A的通信资源就会耗尽,这样模块A将无法向模块B或其他模块发送消息,模块间的交互就无法实现,这会导致软件出现不可预计的后果,比如造成用户数据丢失等。
鉴于此,如何实现对软件模块间通信资源使用时间的监控,以便及时回收通信资源,是所属领域技术人员需要解决的技术问题。
发明内容
本申请提供了一种软件模块间通信资源的使用时间监控方法、装置及计算机可读存储介质,可以实现对软件模块间通信资源使用时间的有效监控,从而及时回收通信资源。
为解决上述技术问题,本发明实施例提供以下技术方案:
本发明实施例一方面提供了一种软件模块间通信资源的使用时间监控方法,应用于发送消息的源模块,包括:
预先创建多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数;
当向目标模块发送封装为所述消息结构体的消息,将所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环,以使所述目标模块在处理完所述消息后调用所述回调函数释放所述消息;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
每隔预设时间触发所述定时任务;所述定时任务用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
可选的,所述消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针;所述使所述目标模块在处理完所述消息后调用所述回调函数释放所述消息包括:
在所述双向环状链表中定位所述消息对应消息节点所在环,将所述消息对应消息节点从当前所在环中取下,同时将所述消息对应消息节点的prev指针和next指针都指向节点自身;
将所述消息的状态标志设置为未使用状态,以被源节点用于发送下一个消息。
可选的,所述若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理包括:
若所述双向环状链表中第N个环上存在至少一个消息节点,则将第N个环上所有消息节点对应的消息进行强制释放或记录错误信息至日志中或发出延迟未释放资源告警。
可选的,所述每隔预设时间触发所述定时任务还包括:
获取预先设置的通信资源最大占用时间;
根据所述通信资源最大占用时间确定所述双向环状链表的监测环;
当检测到达所述定时任务被触发时间,则触发携带所述监测环信息的定时任务;
其中,所述双向环状链表中环总数基于所述通信资源最大占用时间确定,所述监测环为按照锚节点创建时间顺序最后一个被创建的锚节点所在环。
可选的,所述消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针,所述锚节点包括用于指向前一个消息节点的prev指针和用于指向后一个消息节点的next指针;所述定时任务用于检测所述双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点,所述检测所述双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点包括:
判断所述第N个环中所有节点的prev指针和next指针是否均指向自身;
若是,则所述第N个环中只有锚节点;若否,则所述第N个环中存在至少一个消息节点。
本发明实施例还提供了一种软件模块间通信资源的使用时间监控装置,应用于发送消息的源模块,包括:
初始预处理模块,用于预先创建多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数;
消息发送模块,用于当向目标模块发送封装为所述消息结构体的消息,将所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环,以使所述目标模块在处理完所述消息后调用所述回调函数释放所述消息;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
定时任务触发执行模块,用于每隔预设时间触发所述定时任务,所述定时任务用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
本发明实施例另一方面提供了一种软件模块间通信资源的使用时间监控方法,应用于目标模块,包括:
当接收到源模块发送的消息,将所述消息放于预先构建的消息队列中;所述消息被封装为消息结构体,且所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
按照先进先出规则处理所述消息队列中的各等待消息,并在处理完所述消息后调用回调函数释放所述消息;
其中,所述源模块包括多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数;所述定时任务每隔预设时间被触发,用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
本发明实施例还提供了一种软件模块间通信资源的使用时间监控装置,应用于接收消息的目标模块,包括:
消息接收模块,用于当接收到源模块发送的消息,将所述消息放于预先构建的消息队列中;所述消息被封装为所述消息结构体,且所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
消息释放模块,用于按照先进先出规则处理所述消息队列中的各等待消息,并在处理完所述消息后调用回调函数释放所述消息;
其中,所述源模块包括多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和所述回调函数;所述定时任务每隔预设时间被触发,用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
本发明实施例还提供了一种软件模块间通信资源的使用时间监控装置,包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前任一项所述软件模块间通信资源的使用时间监控方法的步骤。
本发明实施例最后还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有软件模块间通信资源的使用时间监控程序,所述软件模块间通信资源的使用时间监控程序被处理器执行时实现如前任一项所述软件模块间通信资源的使用时间监控方法的步骤。
本申请提供的技术方案的优点在于,将源模块发送出去的消息按照时间归为了N类,每类消息都有相近的待处理时间。这样当第N个环上有消息节点时,就意味着已经有消息等待了(N-2)*T的时间还没被处理,T为定时任务被执行的时间间隔,实现了消息发送端对消息发送时间或者是说使用资源的准确有效地监控,及时获知目标模块占用该消息的时间,可以在消息发送后到达一定时间时对被目标模块占用的消息执行后续的处理,从而可有效及时地进行资源回收。
此外,本发明实施例还针对软件模块间通信资源的使用时间监控方法提供了相应的实现装置及计算机可读存储介质,进一步使得所述方法更具有实用性,所述装置及计算机可读存储介质具有相应的优点。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
为了更清楚的说明本发明实施例或相关技术的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种软件模块间通信资源的使用时间监控方法的流程示意图;
图2为本发明实施例提供的另一种软件模块间通信资源的使用时间监控方法的流程示意图;
图3为本发明实施例提供的软件模块间通信资源的使用时间监控装置的一种具体实施方式结构图;
图4为本发明实施例提供的软件模块间通信资源的使用时间监控装置的另一种具体实施方式结构图。
图5为本发明实施例提供的软件模块间通信资源的使用时间监控装置的另一种具体实施方式结构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。
在介绍了本发明实施例的技术方案后,下面详细的说明本申请的各种非限制性实施方式。
首先参见图1,图1为本发明实施例提供的一种软件模块间通信资源的使用时间监控方法的流程示意图,应用于发送消息的源模块,本发明实施例可包括以下内容:
S101:预先创建多个作为双向环状链表锚节点的节点结构体变量,作为双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数。
本申请采用双向环状链表来实现资源使用时长的监控,双向环状链表的每个环上包括两类节点,一类为作为环标志的锚节点,另一个代表消息的消息节点。在本步骤中,消息发送端源模块会预先定义节点结构体类型,每个节点结构体可包括两个指针,一个用于指向前一个节点的node*prev指针,一个用于指向后一个节点的node*next指针,这样节点便可以作为双向环状链表的消息节点。消息发送端源模块还会创建N个节点结构体变量,将它们作为双向环状链表中每个环的锚节点。环的锚节点意味着该节点作为环的标志会一直存在环上,不会在环间移动。消息发送端源模块还会创建一个定时任务,每隔时间T触发一次该定时任务,每次触发,就会把每个环上的非锚节点的其他节点移动到下一个环上。消息发送端源模块还会创建固定数量的消息结构体,每个消息结构体就是一个通信资源,每个消息结构体都包含了:一个节点类型的变量;一个状态标志,值可为use或者unuse,代表消息处于使用状态或者是未使用状态。消息发送端源模块还向消息接收端目标模块注册释放通信资源的回调函数,当消息接收端目标模块需要释放通信资源时,调用回调函数执行资源释放,也即回调函数用于释放目标模块占用源模块的通信资源。
本申请采用双向环状链表,从环上转移消息节点时无需知道当前消息节点处于哪一个环,只需要获取锚节点的前后两个消息节点,并将这两个消息节点连接在下一个锚节点的前后,就能将环上的所有消息节点移动到了下一个环上,非常方便快捷。
S102:当向目标模块发送封装为消息结构体的消息,将消息的状态标志设置为使用状态,同时将消息对应的消息节点插入至第一锚节点所在环,以使目标模块在处理完消息后调用回调函数释放消息。第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量。
本申请采用消息所处环的位置结合节点移动时间实现监控消息被使用时长,利用触发定时任务将环上的消息节点进行向后移动。S101预先创建了多个锚节点,每个锚节点设置在双向环状链表的一个环上,所以每个消息节点优先插入至第一个创建的锚节点所在环上,定时任务触发后,第一个创建的锚节点所在环上的所有消息节点被全部移到第二个创建的锚节点所在环上,直至所有消息节点均移到最后一个创建的锚节点所在环上,这样可以根据消息所处环的位置便可得到该消息被占用时长,实现通信资源使用时间的监控。
S103:每隔预设时间触发定时任务。
本申请中的定时任务用于若双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若第N个环上不存在消息节点,则将各环的消息节点移动至相邻的下一个环中;第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
本步骤中的预设延迟未释放资源规则为预先设置用于对目标模块未及时释放的通信资源的处理方式,例如强制释放或告警等等,所属领域技术人员可根据实际情况进行预先设置。也就是说,消息发送端监控消息接收端对其通信资源的占用时间,如果消息接收端在规定时间内没有释放通信资源,那么消息发送端必须对占用时间较长的通信资源做出处理,比如强制释放通信资源,或者上报告警等。
在本发明实施例提供的技术方案中,将源模块发送出去的消息按照时间归为了N类,每类消息都有相近的待处理时间。这样当第N个环上有消息节点时,就意味着已经有消息等待了(N-2)*T的时间还没被处理,T为定时任务被执行的时间间隔,实现了消息发送端对消息发送时间或者是说使用资源的准确有效地监控,及时获知目标模块占用该消息的时间,可以在消息发送后到达一定时间时对被目标模块占用的消息执行后续的处理,从而可有效及时地进行资源回收。
在上述实施例中,消息释放是通过调用回调函数实现的,而至于回调函数如何构建并不做限定,双向环状链表中的每个节点,消息节点和锚节点,均包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针,本实施例中给出回调函数的一种实施方式,可包括如下步骤:
在双向环状链表中定位消息对应消息节点所在环,将消息对应消息节点从当前所在环中取下,同时将消息对应消息节点的prev指针和next指针都指向节点自身;
将消息的状态标志设置为未使用状态,以被源节点用于发送下一个消息。
本发明实施例通过将消息从环中取下,同时将消息的状态标志进行修改,使得该消息不会被继续监控,而且可以继续被消息发送端使用。
可以理解的是,本发明实施例使得消息发送端实现监控消息接收端对其通信资源的占用时间,如果消息接收端在规定时间内没有释放通信资源,那么消息发送端必须对占用时间较长的通信资源做出处理,也即若双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理可包括:
若双向环状链表中第N个环上存在至少一个消息节点,则将第N个环上所有消息节点对应的消息进行强制释放或记录错误信息至日志中或发出延迟未释放资源告警。
通过对延迟未释放资源进行不同方式处理,既提高了使用灵活性,还有利于及时释放资源。
本申请使用双向环状链表的N个环来记录所有已发送出去的消息,接收消息的目标模块,每次收到消息后,都将消息入队。当消息处理完后,将消息从队列和环上移除,没有被处理的消息会一直存环上和队列中。发出时间相近的消息处在同一个环上,不同环上的数据每隔T时间转移一次,第n个环上的消息已发出的时间为(n-2)*T。这样当第n(n指1到N的任意整数)个环上有消息节点时,就意味着已经有消息等待了(n-2)*T的时间还没被处理。针对当前应用场景可设置每个消息节点被目标模块最长使用时间(n-2)*T,也即通信资源最大占用时间,可以在消息发送后到达通信资源最大占用时间时,通过(n-2)*T直接定位监测环,按照预设延迟未释放资源规则对该监测环上的数据执行后续的处理。作为一种可选的实施方式,每隔预设时间触发定时任务的实施过程中可包括:
获取预先设置的通信资源最大占用时间。
根据通信资源最大占用时间确定双向环状链表的监测环。
在本实施例中,消息节点从第1个环到第2个环上转移的时间可能是0到T,因为第一次转移一定是在当前定时任务的执行时间段T内。从第2个环开始,消息节点每向下一个环转移一次,就经过了完整的时间T。(n-2)*T的时间被作为通信资源最大占用时间,如果一个消息节点经过了(n-2)*T的时间还在环上,就意味着它所在的消息节点经过了(n-2)*T的时间还没有被处理,这个消息节点所在的第n个环即为监测环。
当检测到达定时任务被触发时间,则触发携带监测环信息的定时任务。
作为一种可选的实施方式,避免过多创建环占用资源,双向环状链表中环总数基于通信资源最大占用时间确定,也就是说双向环状链表中环总数与通信资源最大占用时间相关联,监测环为按照锚节点创建时间顺序最后一个被创建的锚节点所在环。对于监测环来说,无非两种情况,一种是只有锚节点,一种是除了锚节点还有消息节点,下述给出了监测环属于上面所说哪种情况的一种判断方式:
若消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针,锚节点包括用于指向前一个消息节点的prev指针和用于指向后一个消息节点的next指针;定时任务用于检测双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点,检测双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点包括:
判断第N个环中所有节点的prev指针和next指针是否均指向自身;
若是,则第N个环中只有锚节点;若否,则第N个环中存在至少一个消息节点,只要监测环中存在一个节点的prev指针和next指针不指向自身,则监测环中就存在消息节点。
上述内容是基于消息发送端源模块作为执行主语的角度上对本申请技术方案的描述,为了使所属领域技术人员更加清楚明白本申请的技术方案,本申请还提供了基于消息接收端目标模块作为执行主语的角度的实施例,请参见图2,图2为本发明实施例提供的另一种软件模块间通信资源的使用时间监控方法的流程示意图,具体的可包括以下内容:
S201:当接收到源模块发送的消息,将消息放于预先构建的消息队列中。
在本实施例中,消息接收端目标模块可预先创建一个消息队列msg_queue,当源模块发送过来消息后,把列消息放入消息对列msg_queue的队尾。源模块发送的消息未被封装为消息结构体的消息,且消息的状态标志设置为使用状态,同时将消息对应的消息节点插入至第一锚节点所在环;第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量。源模块预先创建多个作为双向环状链表锚节点的节点结构体变量,作为双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数。定时任务每隔预设时间被触发,用于若双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若第N个环上不存在消息节点,则将各环的消息节点移动至相邻的下一个环中;第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
S202:按照先进先出规则处理消息队列中的各等待消息,并在处理完消息后调用回调函数释放消息。
在本步骤中,消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针,目标模块可通过下述方式实现对消息的释放:
在双向环状链表中定位消息对应消息节点所在环,将消息对应消息节点从当前所在环中取下,同时将消息对应消息节点的prev指针和next指针都指向节点自身;
将消息的状态标志设置为未使用状态,以被源节点用于发送下一个消息。
由上可知,本发明实施例可以实现对软件模块间通信资源使用时间的有效监控,从而及时回收通信资源。实现每隔一段时间,获得所有已发送消息的时间,这样就能对发送时间过长的消息做出一些处理,避免发送的消息长时间阻塞的情况。提高了软件的健壮性,提高了产品的竞争力。
需要说明的是,本申请中各步骤之间没有严格的先后执行顺序,只要符合逻辑上的顺序,则这些步骤可以同时执行,也可按照某种预设顺序执行,图1-图2只是一种示意方式,并不代表只能是这样的执行顺序。
本发明实施例还针对软件模块间通信资源的使用时间监控方法提供了相应的装置,进一步使得所述方法更具有实用性。其中,装置可从功能模块的角度和硬件的角度分别说明。下面对本发明实施例提供的软件模块间通信资源的使用时间监控装置进行介绍,下文描述的软件模块间通信资源的使用时间监控装置与上文描述的软件模块间通信资源的使用时间监控方法可相互对应参照。
基于功能模块的角度,对于应用于消息发送端的源模块,请参见图3,图3为本发明实施例提供的软件模块间通信资源的使用时间监控装置在一种具体实施方式下的结构图,该装置可包括:
初始预处理模块301,用于预先创建多个作为双向环状链表锚节点的节点结构体变量,作为双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数。
消息发送模块302,用于当向目标模块发送封装为消息结构体的消息,将消息的状态标志设置为使用状态,同时将消息对应的消息节点插入至第一锚节点所在环,以使目标模块在处理完消息后调用回调函数释放消息;第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量。
定时任务触发执行模块303,用于每隔预设时间触发定时任务,定时任务用于若双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若第N个环上不存在消息节点,则将各环的消息节点移动至相邻的下一个环中;第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
可选的,在本实施例的一些实施方式中,所述定时任务触发执行模块303还可以包括资源强制释放子模块和/或告警子模块和/或日志记录子模块;
资源强制释放子模块用于若双向环状链表中第N个环上存在至少一个消息节点,则将第N个环上所有消息节点对应的消息进行强制释放。
日志记录子模块用于若双向环状链表中第N个环上存在至少一个消息节点,则将第N个环上所有消息节点对应的消息记录错误信息至日志中。
告警子模块用于若双向环状链表中第N个环上存在至少一个消息节点,则发出延迟未释放资源告警。
作为另外一种可选的实施方式,所述定时任务触发执行模块303例如可包括:
获取子模块,用于获取预先设置的通信资源最大占用时间;
监测环定位子模块,用于根据通信资源最大占用时间确定双向环状链表的监测环;双向环状链表中环总数基于通信资源最大占用时间确定,监测环为按照锚节点创建时间顺序最后一个被创建的锚节点所在环。
触发子模块,用于当检测到达定时任务被触发时间,则触发携带监测环信息的定时任务。
在本发明实施例的一些实施方式中,所述定时任务触发执行模块303例如还可包括节点检测子模块,所述节点检测子模块包括:
锚节点判定单元,用于若第N个环中所有节点的prev指针和next指针均指向自身,则第N个环中只有锚节点。
消息节点判定单元,用于若第N个环中存在prev指针和next指针不指向自身的节点,则prev指针和next指针不指向自身的节点为消息节点。消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针,锚节点包括用于指向前一个消息节点的prev指针和用于指向后一个消息节点的next指针;定时任务用于检测双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点。
基于功能模块的角度,对于应用于消息接收端的目标模块,请参见图4,图4为本发明实施例提供的软件模块间通信资源的使用时间监控装置在一种具体实施方式下的结构图,该装置可包括:
消息接收模块401,用于当接收到源模块发送的消息,将消息放于预先构建的消息队列中;消息被封装为消息结构体,且消息的状态标志设置为使用状态,同时将消息对应的消息节点插入至第一锚节点所在环;第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
消息释放模块402,用于按照先进先出规则处理消息队列中的各等待消息,并在处理完消息后调用回调函数释放消息;
其中,源模块包括多个作为双向环状链表锚节点的节点结构体变量,作为双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数;定时任务每隔预设时间被触发,用于若双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若第N个环上不存在消息节点,则将各环的消息节点移动至相邻的下一个环中;第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
作为一种可选的实施方式,所述消息释放子模块402可包括:
下环子模块,用于在所述双向环状链表中定位所述消息对应消息节点所在环,将所述消息对应消息节点从当前所在环中取下,同时将所述消息对应消息节点的prev指针和next指针都指向节点自身;所述消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针;
状态重置子模块,用于将所述消息的状态标志设置为未使用状态,以被所述源节点用于发送下一个消息。
本发明实施例所述软件模块间通信资源的使用时间监控装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
由上可知,本发明实施例可以实现对软件模块间通信资源使用时间的有效监控,从而及时回收通信资源。
上文中提到的软件模块间通信资源的使用时间监控装置是从功能模块的角度描述,进一步的,本申请还提供一种软件模块间通信资源的使用时间监控装置,是从硬件角度描述。图5为本申请实施例提供的另一种软件模块间通信资源的使用时间监控装置的结构图。软件模块间通信资源的使用时间监控装置可包括消息发送端源模块和消息接收端目标模块,源模块和目标模块可均具有存储器和处理器,分别执行相应的软件模块间通信资源的使用时间监控方法的步骤。为了便于描述,可以源模块为例阐述相应装置的硬件结构,如图5所示,该装置包括存储器50,用于存储计算机程序;
处理器51,用于执行计算机程序时实现如上述任一实施例提到的软件模块间通信资源的使用时间监控方法的步骤。
其中,处理器51可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器51可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器51也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器51可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器51还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器50可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器50还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器50至少用于存储以下计算机程序501,其中,该计算机程序被处理器51加载并执行之后,能够实现前述任一实施例公开的软件模块间通信资源的使用时间监控方法的相关步骤。另外,存储器50所存储的资源还可以包括操作系统502和数据503等,存储方式可以是短暂存储或者永久存储。其中,操作系统502可以包括Windows、Unix、Linux等。数据503可以包括但不限于测试结果对应的数据等。
在一些实施例中,软件模块间通信资源的使用时间监控装置还可包括有显示屏52、输入输出接口53、通信接口54、电源55以及通信总线56。
本领域技术人员可以理解,图5中示出的结构并不构成对软件模块间通信资源的使用时间监控装置的限定,可以包括比图示更多或更少的组件,例如传感器57。
本发明实施例所述软件模块间通信资源的使用时间监控装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
由上可知,本发明实施例可以实现对软件模块间通信资源使用时间的有效监控,从而及时回收通信资源。
可以理解的是,如果上述实施例中的软件模块间通信资源的使用时间监控方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、磁碟或者光盘等各种可以存储程序代码的介质。
基于此,本发明实施例还提供了一种计算机可读存储介质,存储有软件模块间通信资源的使用时间监控程序,所述软件模块间通信资源的使用时间监控程序被处理器执行时如上任意一实施例所述软件模块间通信资源的使用时间监控方法的步骤。
本发明实施例所述计算机可读存储介质的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
由上可知,本发明实施例可以实现对软件模块间通信资源使用时间的有效监控,从而及时回收通信资源。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上对本申请所提供的一种软件模块间通信资源的使用时间监控方法、装置及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (10)
1.一种软件模块间通信资源的使用时间监控方法,其特征在于,应用于发送消息的源模块,包括:
预先创建多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数;
当向目标模块发送封装为所述消息结构体的消息,将所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环,以使所述目标模块在处理完所述消息后调用所述回调函数释放所述消息;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
每隔预设时间触发所述定时任务;所述定时任务用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
2.根据权利要求1所述的软件模块间通信资源的使用时间监控方法,其特征在于,所述消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针;所述使所述目标模块在处理完所述消息后调用所述回调函数释放所述消息包括:
在所述双向环状链表中定位所述消息对应消息节点所在环,将所述消息对应消息节点从当前所在环中取下,同时将所述消息对应消息节点的prev指针和next指针都指向节点自身;
将所述消息的状态标志设置为未使用状态,以被源节点用于发送下一个消息。
3.根据权利要求1所述的软件模块间通信资源的使用时间监控方法,其特征在于,所述若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理包括:
若所述双向环状链表中第N个环上存在至少一个消息节点,则将第N个环上所有消息节点对应的消息进行强制释放或记录错误信息至日志中或发出延迟未释放资源告警。
4.根据权利要求1至3任意一项所述的软件模块间通信资源的使用时间监控方法,其特征在于,所述每隔预设时间触发所述定时任务还包括:
获取预先设置的通信资源最大占用时间;
根据所述通信资源最大占用时间确定所述双向环状链表的监测环;
当检测到达所述定时任务被触发时间,则触发携带所述监测环信息的定时任务;
其中,所述双向环状链表中环总数基于所述通信资源最大占用时间确定,所述监测环为按照锚节点创建时间顺序最后一个被创建的锚节点所在环。
5.根据权利要求4所述的软件模块间通信资源的使用时间监控方法,其特征在于,所述消息节点包括用于指向前一个节点的prev指针和用于指向后一个节点的next指针,所述锚节点包括用于指向前一个消息节点的prev指针和用于指向后一个消息节点的next指针;所述定时任务用于检测所述双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点,所述检测所述双向环状链表的第N个环上是否存在非锚节点的任何一个消息节点包括:
判断所述第N个环中所有节点的prev指针和next指针是否均指向自身;
若是,则所述第N个环中只有锚节点;若否,则所述第N个环中存在至少一个消息节点。
6.一种软件模块间通信资源的使用时间监控方法,其特征在于,应用于接收消息的目标模块,包括:
当接收到源模块发送的消息,将所述消息放于预先构建的消息队列中;所述消息被封装为消息结构体,且所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
按照先进先出规则处理所述消息队列中的各等待消息,并在处理完所述消息后调用回调函数释放所述消息;
其中,所述源模块包括多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和所述回调函数;所述定时任务每隔预设时间被触发,用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
7.一种软件模块间通信资源的使用时间监控装置,其特征在于,应用于发送消息的源模块,包括:
初始预处理模块,用于预先创建多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和回调函数;
消息发送模块,用于当向目标模块发送封装为所述消息结构体的消息,将所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环,以使所述目标模块在处理完所述消息后调用所述回调函数释放所述消息;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
定时任务触发执行模块,用于每隔预设时间触发所述定时任务,所述定时任务用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
8.一种软件模块间通信资源的使用时间监控装置,其特征在于,应用于接收消息的目标模块,包括:
消息接收模块,用于当接收到源模块发送的消息,将所述消息放于预先构建的消息队列中;所述消息被封装为消息结构体,且所述消息的状态标志设置为使用状态,同时将所述消息对应的消息节点插入至第一锚节点所在环;所述第一锚节点为按照锚节点创建时间顺序第一个被创建的节点结构体变量;
消息释放模块,用于按照先进先出规则处理所述消息队列中的各等待消息,并在处理完所述消息后调用回调函数释放所述消息;
其中,所述源模块包括多个作为双向环状链表锚节点的节点结构体变量,作为所述双向环状链表消息节点、用于表示通信资源且包括节点类型和状态标志的消息结构体,定时任务和所述回调函数;所述定时任务每隔预设时间被触发,用于若所述双向环状链表中第N个环上存在至少一个消息节点,则按照预设延迟未释放资源规则进行处理;若所述第N个环上不存在所述消息节点,则将各环的消息节点移动至相邻的下一个环中;所述第N个环为按照锚节点创建时间顺序第N个被创建的锚节点所在环。
9.一种软件模块间通信资源的使用时间监控装置,其特征在于,包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1至5任一项所述软件模块间通信资源的使用时间监控方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有软件模块间通信资源的使用时间监控程序,所述软件模块间通信资源的使用时间监控程序被处理器执行时实现如权利要求1至5任一项所述软件模块间通信资源的使用时间监控方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010915084.7A CN111813636B (zh) | 2020-09-03 | 2020-09-03 | 软件模块间通信资源的使用时间监控方法、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010915084.7A CN111813636B (zh) | 2020-09-03 | 2020-09-03 | 软件模块间通信资源的使用时间监控方法、装置及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111813636A true CN111813636A (zh) | 2020-10-23 |
CN111813636B CN111813636B (zh) | 2021-02-23 |
Family
ID=72859954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010915084.7A Active CN111813636B (zh) | 2020-09-03 | 2020-09-03 | 软件模块间通信资源的使用时间监控方法、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111813636B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19947066A1 (de) * | 1999-09-30 | 2001-04-05 | Siemens Ag | Verwaltung relativer Zeitaufträge in einem Realzeitsystem |
CN1936859A (zh) * | 2005-09-30 | 2007-03-28 | 康佳集团股份有限公司 | 一种内存监控方法 |
CN103326958A (zh) * | 2012-03-22 | 2013-09-25 | 鸿富锦精密工业(深圳)有限公司 | 监控数据缓存方法及系统 |
CN108123851A (zh) * | 2017-12-29 | 2018-06-05 | 北京奇虎科技有限公司 | 分布式系统中主从节点同步链路的存活检测方法及装置 |
CN109639751A (zh) * | 2018-10-16 | 2019-04-16 | 平安科技(深圳)有限公司 | 区块链节点监控方法、装置、系统及计算机存储介质 |
-
2020
- 2020-09-03 CN CN202010915084.7A patent/CN111813636B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19947066A1 (de) * | 1999-09-30 | 2001-04-05 | Siemens Ag | Verwaltung relativer Zeitaufträge in einem Realzeitsystem |
CN1936859A (zh) * | 2005-09-30 | 2007-03-28 | 康佳集团股份有限公司 | 一种内存监控方法 |
CN103326958A (zh) * | 2012-03-22 | 2013-09-25 | 鸿富锦精密工业(深圳)有限公司 | 监控数据缓存方法及系统 |
CN108123851A (zh) * | 2017-12-29 | 2018-06-05 | 北京奇虎科技有限公司 | 分布式系统中主从节点同步链路的存活检测方法及装置 |
CN109639751A (zh) * | 2018-10-16 | 2019-04-16 | 平安科技(深圳)有限公司 | 区块链节点监控方法、装置、系统及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111813636B (zh) | 2021-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
CN111078368B (zh) | 云计算平台虚拟机的内存快照方法、装置及可读存储介质 | |
CN102984029B (zh) | 应用于分布式系统的心跳检测装置和方法、网络设备 | |
CN110321226A (zh) | 主机的自动扩缩容方法、装置、主机及存储介质 | |
CN107038107A (zh) | 一种获取应用卡顿信息的方法及装置 | |
CN110704173A (zh) | 任务调度方法、调度系统、电子设备及计算机存储介质 | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN108809683B (zh) | 部署云应用系统的方法及装置 | |
CN108664394A (zh) | 一种内存泄露过程追溯方法及装置 | |
CN111813636B (zh) | 软件模块间通信资源的使用时间监控方法、装置及介质 | |
CN104391754B (zh) | 一种任务异常的处理方法及装置 | |
SE500940C2 (sv) | Sätt och system för att i ett distribuerat operativsystem demontera en kedja av sammanlänkade processer | |
CN113190427A (zh) | 卡顿监控方法、装置、电子设备及存储介质 | |
CN108762983A (zh) | 多媒体数据恢复方法及装置 | |
CN103226480A (zh) | 用于动态地重新配置多核系统的操作系统的设备和方法 | |
CN114785714B (zh) | 一种报文传输时延检测方法、存储介质及设备 | |
CN103593606B (zh) | 上下文信息管理方法及系统 | |
EP2784712A2 (en) | Lock release device and method | |
CN115658446A (zh) | 一种wdt仿真验证方法、装置、设备及介质 | |
CN111309475B (zh) | 一种检测任务执行方法及设备 | |
CN116360930A (zh) | 一种任务处理的方法及装置 | |
CN104050030A (zh) | 一种操作系统进程调度方法 | |
CN109324916B (zh) | 一种任务执行方法和装置 | |
CN110959152B (zh) | 访问控制装置 | |
CN108920298B (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 |