CN110058948B - 一种资源监控方法、装置、设备及介质 - Google Patents
一种资源监控方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN110058948B CN110058948B CN201910351017.4A CN201910351017A CN110058948B CN 110058948 B CN110058948 B CN 110058948B CN 201910351017 A CN201910351017 A CN 201910351017A CN 110058948 B CN110058948 B CN 110058948B
- Authority
- CN
- China
- Prior art keywords
- applicant
- resource
- data
- data node
- data structure
- 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.)
- Active
Links
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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/508—Monitor
Abstract
本申请实施例公开了一种资源监控方法,该方法包括:在第一申请者申请资源时,创建数据节点记录该第一申请者的身份标识,将该数据节点保存至该资源对应的数据结构中;在第二申请者调用该资源异常终止时,查看该资源对应的数据结构中是否存在第二申请者的身份标识,若在数据结构中仍存在第二申请者的身份标识,相应地从数据结构中删除第二申请者对应的数据节点;如此,在申请者调用资源异常终止的情况下,可以通过判断资源对应的数据结构中是否记录有申请者身份标识的数据节点,以确定申请者异常退出前是否持有资源,从而保证数据结构中的数据节点数能够准确表征资源的引用计数。
Description
技术领域
本申请涉及资源管理技术领域,尤其涉及一种资源监控方法、装置、设备及介质。
背景技术
引用计数是计算机编程语言中的一种内存管理技术,其就是针对资源(可以是对象、内存或磁盘空间等等)记录其被引用的次数,该资源对应的引用计数可加可减,当资源对应的引用计数变为零时就可将其释放。
多进程/线程应用通常使用引用计数来管理共享资源。在申请共享资源时,将引用计数加一,归还所申请的共享资源后将引用计数减一。当资源引用计数不为零时,资源不能被修改,也不能被销毁。
目前通常使用整型原子变量来实现引用计数,配合互斥锁或者操作系统原子指令,实现引用计数的加减。但是,这种引用计数方案在进程/线程异常终止的情况下,无法确定该进程/线程退出之前是否持有资源,从而无法正确恢复资源的引用计数,影响资源的读取、修改以及释放。
发明内容
本申请实施例提供了一种资源监控方法、装置、设备及介质,在申请者调用资源异常终止的情况下,能够准确地确定引用计数,保证资源的读取、修改以及释放正常进行。
有鉴于此,本申请第一方面提供了一种资源监控方法,包括:
在第一申请者申请资源时,创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;
在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点。
可选的,当所述第一申请者申请所述资源时,获取所述资源对应的锁,在将所述数据节点保存至所述数据结构时,释放所述资源对应的锁,允许所述第一申请者持有所述资源。
可选的,当所述第一申请者归还所述资源时,获取所述资源对应的锁,从所述数据结构中删除所述第一申请者对应的数据节点,释放所述资源对应的锁。
可选的,所述数据结构采用单链表;所述数据节点包括数据字段和指针字段,所述数据字段用于记录申请者的身份标识,所述指针字段用于记录下一个数据节点地址。
可选的,所述创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,包括:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为空;
将所述数据结构中最后一个数据节点的指针字段设置为所述数据节点的指针。
可选的,所述创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,包括:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为所述数据结构中当前头节点的地址;
将所述数据结构中当前头节点的指针字段设置为所述数据节点的地址。可选的,所述链表采用侵入式链表。
可选的,所述申请者为进程或线程。
本申请第二方面提供了一种资源监控装置,包括:
记录模块,用于在第一申请者申请资源时,创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;
计数恢复模块,用于在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点。
可选的,所述装置还包括:
申请模块,用于当所述第一申请者申请所述资源时,获取所述资源对应的锁,在将所述数据节点保存至所述数据结构时,释放所述资源对应的锁,允许所述第一申请者持有所述资源。
可选的,所述装置还包括:
归还模块,用于当所述第一申请者归还所述资源时,获取所述资源对应的锁,从所述数据结构中删除所述第一申请者对应的数据节点,释放所述资源对应的锁。
可选的,所述数据结构采用单链表;所述数据节点包括数据字段和指针字段,所述数据字段用于记录申请者的身份标识,所述指针字段用于记录下一个数据节点地址。
可选的,所述记录模块具体用于:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为空;
将所述数据结构中最后一个数据节点的指针字段设置为所述数据节点的指针。
可选的,所述记录模块具体用于:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为所述数据结构中当前头节点的地址;
将所述数据结构中当前头节点的指针字段设置为所述数据节点的地址。可选的,所述链表采用侵入式链表。
可选的,所述申请者为进程或线程。
本申请第三方面提供一种存储设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令,执行如上述第一方面所述的资源监控方法的步骤。
本申请第四方面提供一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行上述第一方面所述的资源监控方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例提供了一种资源监控方法,该方法在申请者申请资源时,会相应地记录申请者的身份标识,从而保证在申请者调用资源异常终止的情况下,可以根据所记录的申请者的身份标识准确地确定该资源的引用计数。具体的,在第一申请者申请资源时,创建数据节点记录该第一申请者的身份标识,将该数据节点保存至该资源对应的数据结构中;在第二申请者调用该资源异常终止时,查看该资源对应的数据结构中是否存在第二申请者的身份标识,若在数据结构中仍存在第二申请者的身份标识,则说明该第二申请者在调用资源异常终止前持有该资源,此时,相应地从数据结构中删除第二申请者对应的数据节点;如此,在申请者调用资源异常终止的情况下,可以通过判断资源对应的数据结构中是否仍存在记录有申请者身份标识的数据节点,准确地更新对应于该资源的数据结构,从而保证该数据结构中包括的数据节点数即为准确的引用计数。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的资源监控方法的应用场景示意图;
图2为本申请实施例提供的资源监控方法的流程示意图;
图3为本申请实施例提供的单链表数据结构的示意图;
图4为本申请实施例提供的资源监控装置的结构示意图;
图5为本申请实施例提供的服务器的结构示意图;
图6为本申请实施例提供的终端设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
现有技术中,通常使用整型原子变量实现资源的引用计数,配合互斥锁或者操作系统原子指令,实现引用计数的加减。这种引用计数方案通常只记录用于计数的数字,在申请者访问资源异常终止的情况下,该方案无法确定申请者在异常退出之前是否仍持有资源,因此,将导致无法正确恢复资源的引用计数,进而将对资源的读取、修改以及释放操作造成影响。
针对上述现有技术存在的问题,本申请实施例提供了一种资源监控方法,该方法在申请者申请资源时,相应地创建数据节点记录访问该资源的申请者的身份标识,并将该数据节点添加至资源对应的数据结构中,从而保证在申请者调用资源异常终止时,可以根据数据结构中记录的申请者的身份标识来确定该申请者在调用资源异常终止之前是否仍持有资源,进而保证根据数据结构中的数据节点数准确地确定资源的引用计数。
具体的,在第一申请者申请资源时,创建数据节点记录该第一申请者的身份标识,将该数据节点保存至数据结构中,该数据结构中记录有与该资源相对应的各个数据节点;在第二申请者调用该资源异常终止时,查看该资源对应的数据结构中是否存在第二申请者的身份标识,若该数据结构中存在第二申请者的身份标识,则说明该第二申请者在调用资源异常终止之前持有该资源,此时相应地从数据结构中删除该第二申请者对应的数据节点;反之,若数据结构中不存在该第二申请者的身份标识,则说明该第二申请者在调用资源异常终止之前已不持有该资源,此时无需执行任何操作。如此,在申请者调用资源异常终止的情况下,通过判断资源对应的数据结构中是否仍存在该申请者的身份标识,来判断申请者在调用资源异常终止之前是否持有该资源,从而保证数据结构中的数据节点数即为准确的引用计数。
应理解,本申请实施例提供的资源监控方法可以应用于相关资源管理设备,如终端设备、服务器等;其中,终端设备具体可以为计算机、个人数字助理(Personal DigitalAssitant,PDA)、手机、平板电脑等;服务器具体可以为应用服务器,也可以为Web服务器,在实际应用部署时,该服务器可以为独立服务器,也可以为集群服务器。
为了便于理解本申请实施例提供的技术方案,下面结合应用场景对本申请实施例提供的资源监控方法进行介绍。
参见图1,图1为本申请实施例提供的资源监控方法的应用场景示意图;如图1所示,该应用场景中包括磁盘空间101,该磁盘空间101可以被设置在服务器中,也可以被设置在终端设备中,其为可被申请者访问的资源。
申请者A、申请者B和申请者C逐一申请磁盘空间101,相应地,用于管理磁盘空间101的设备将逐一为申请者A、申请者B和申请者C创建数据节点,在为申请者A创建的数据节点中记录申请者A的身份标识,在为申请者B创建的数据节点中记录申请者B的身份标识,在为申请者C创建的数据节点中记录申请者C的身份标识,将所创建的三个数据节点逐一保存在磁盘空间101对应的数据结构中;如若当前只有申请者A、申请者B和申请者C申请磁盘空间,则数据结构中当前相应地包括三个数据节点,相应地表明该资源对应的引用计数为3。
若申请者A调用磁盘空间101异常终止,此时,查看磁盘空间101对应的数据结构中是否仍存在申请者A的身份标识,若该数据结构中仍存在申请者A的身份标识,则说明申请者A在调用磁盘空间101异常终止之前持有磁盘空间101的资源,此时,相应地从数据结构中删除申请者A对应的数据节点。
由此,在申请者A调用磁盘空间101异常终止的情况下,通过判断磁盘空间101对应的数据结构中是否仍存在该申请者A的身份标识,来判断申请者A在调用资源异常终止之前是否持有磁盘空间101的资源,从而保证资源对应的数据结构中的数据节点数即为该资源对应的准确的引用计数。
应理解,上述图1所示的应用场景仅为一种示例,在实际应用中,可被申请者访问的资源并不仅限于磁盘空间,还可以为对象、内存等;并且,访问资源的申请者的数量也并不仅限于三个;在此不对本申请实施例提供的资源监控方法的应用场景做任何限定。
下面通过实施例对本申请提供的资源监控方法进行介绍。
参见图2,图2为本申请实施例提供的一种资源监控方法的流程示意图。为了便于描述,下述实施例以服务器作为执行主体进行描述,应理解,该资源监控方法的执行主体并不仅局限于服务器,还可以为终端设备等。如图2所示,该资源监控方法包括以下步骤:
步骤201:在第一申请者申请资源时,创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点。
当服务器检测到第一申请者申请资源时,会相应地针对每个申请资源的第一申请者创建数据节点,以利用所创建的数据节点记录申请该资源的第一申请者的身份标识,第一申请者的身份标识能够唯一标识第一申请者的身份,具体可以为第一申请者的ID。
应理解,服务器所创建的数据节点的数量,取决于申请该资源的第一申请者的数量,即服务器会分别为每个申请该资源的第一申请者创建一个对应的数据节点。
进而,将记录有第一申请者的身份标识的数据节点保存至该资源对应的数据结构中,该数据结构中记录有与该资源对应的各个数据节点,即该数据结构中的各个数据节点记录有访问该资源的各个第一申请者的身份标识。应理解,该数据结构中所记录的数据节点的数量实际上表征访问该资源的申请者的数量,即该数据结构中数据节点的数目即为该资源对应的引用计数。
需要说明的是,上述第一申请者具体可以表现为进程或线程;其中,进程是指设备中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础;线程也可以被称为轻量进程(Lightweight Process,LWP),其是比进程更小的独立运行的基本单位,属于进程内的可调度实体。
当第一申请者申请资源时,服务器会获取该资源对应的锁,在将数据节点保存至数据结构时,释放资源对应的锁,允许第一申请者持有该资源。
即,在第一申请者申请资源时,服务器会相应地对该资源对应的数据结构进行上锁操作,以防止在向数据结构中添加数据节点的过程中,受到其他申请者申请或归还资源的影响,导致数据结构中记录的数据节点错乱;待将用于记录该第一申请者的身份标识的数据节点保存至数据结构中后,释放该资源对应的锁,允许该第一申请者持有资源;释放资源对应的锁后,可以在该数据结构中添加或删除数据节点。
需要说明的是,上述数据结构可以采用单链表结构;相应地,数据节点中包括数据字段和指针字段,其中,数据字段用于记录申请者的身份标识,指针字段用于记录下一个数据节点地址。
如图3所示,图3为单链表结构的一种表现形式;其中包括数据节点A、数据节点B和数据节点C,每个数据节点中均包括有数据字段和指针字段;数据节点A中的数据字段记录有第一申请者a的身份标识,指针字段记录有数据节点B的存储地址;数据节点B中的数据字段记录有第一申请者b的身份标识,指针字段记录有数据节点C的存储地址;数据节点C中的数据字段记录有第一申请者c的身份标识,若在第一申请者c之后尚未存在其他第一申请者访问该资源,则数据节点C中的指针字段为空。
在一种可能的实现方式中,当资源对应的数据结构为单链表结构时,若服务器检测到第一申请者申请该资源,此时,服务器创建数据节点,将该数据节点的数据字段设置为第一申请者的身份标识,将该数据节点的指针字段设置为空;进而,将该数据结构中的最后一个数据节点的指针字段设置为该数据节点的指针。
具体的,当所采用的资源对应的数据结构为单链表结构时,若服务器检测到第一申请者申请该资源,则相应地针对该第一申请者创建数据节点,并将该数据节点的数据字段设置为第一申请者的身份标识,将该数据节点的指针字段设置为空;进而,为该资源对应的单链表结构中最后一个数据节点中的指针字段,赋值新创建的数据节点的地址,将新创建的数据节点作为资源对应的单链表结构中的最后一个数据节点。
在另一种可能的实现方式中,当资源对应的数据结构为单链表结构时,若服务器检测到第一申请者申请该资源,服务器创建数据节点,将数据节点的数据字段设置为第一申请者的身份标识,将该数据节点的指针字段设置为该数据结构中当前头节点的地址;将该数据结构中当前头节点的指针字段设置为该数据节点的地址。
具体的,当所采用的资源对应的数据结构为单链表结构时,若服务器检测到第一申请者申请该资源,则相应地针对该第一申请者创建数据节点,并将该数据节点的数据字段设置为该第一申请者的身份标识,将该数据节点的指针字段设置为该数据结构中当前头节点的地址,即利用该数据节点替换该数据结构中原本的头节点,作为该数据结构中新的头节点;与此同时,将该数据结构中原本的头节点的指针字段设置为该数据节点的地址;如此,不断地利用新创建的数据节点替换单链表结构中原本的头节点,即随着数据节点的创建,不断地更新单链表结构的头节点。
需要说明的是,除了可以采用单链表形式的数据结构外,还可以采用侵入式链表,侵入式链表中的数据节点的内存可以由外部传入,如此服务器内部不需要为数据节点申请内存,可以节省服务器的内存。
此外,在第一申请者固定的情况下,也可以采用数组或位图作为数据结构,其会预先为每个第一申请者分配固定的数据节点,在该第一申请者访问该资源时,直接将该第一申请者的身份标识填写至预先为该第一申请者分配的数据节点中。
当然,还可以采用其他数据结构记录与资源对应的各个数据节点,在此不对所采用的数据结构的形式做具体限定。
步骤202:在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点。
在第二申请者调用资源异常终止时,服务器可以相应地查看数据结构中是否存在用于记录该第二申请者的身份标识的数据节点,若存在,则说明该第二申请者在调用资源异常终止之前持有资源,此时,相应地从数据结构中删除第二申请者对应的数据节点;反之,若不存在,则说明该第二申请者在调用资源异常终止之前不持有资源,相应地无需执行任何操作。
需要说明的是,申请者调用资源具体分为申请资源阶段、持有资源阶段和归还资源阶段,第二申请者调用资源异常终止,具体指在申请资源阶段、持有资源阶段和归还资源阶段中任意一个阶段异常终止,即,在申请资源阶段异常终止、在持有资源阶段异常终止以及在归还资源阶段异常终止,均属于调用资源异常终止。
应理解,第二申请者与第一申请者相类似,其具体也可以表现为进程或线程。
应理解,删除数据结构中记录有第二申请者的身份标识的数据节点,该数据结构中数据节点的数量会相应地减少,相当于该资源对应的引用计数相应地减少;数据节点数量减少的数目取决于数据结构中记录的调用资源异常终止的第二申请者的数量,即,若同时存在多个第二申请者调用资源异常终止,服务器可以查看数据结构中是否仍存在这多个第二申请者的身份标识,若数据结构中存在多个第二申请者的身份标识,则相应地删除这多个第二申请者各自对应的数据节点。
需要说明的是,当资源对应的数据结构为单链表结构时,在第二申请者访问资源异常终止时,服务器可以查看该单链表结构中是否存在记录该第二申请者的身份标识的数据节点,若未查找到,则不执行任何操作;若查找到,且所查找到的数据节点为该单链表结构的头节点,则将该头节点删除,将与该头节点相邻的节点作为新的头节点,并且将该单链表结构的指针修改为新的头节点的地址;若查找到,且所查找到的数据节点不是单链表结构的头节点,则将所查找到的数据节点删除,将该数据节点的上一个数据节点中的指针字段,修改为该数据节点的下一个数据节点的地址。
需要说明的是,当申请资源的第一申请者正常归还资源时,服务器也会相应地获取资源对应的锁,从数据结构中删除该第一申请者对应的数据节点,释放资源对应的锁。
即,在第一申请者归还资源时,服务器会相应地对该资源对应的数据结构进行上锁操作,以防止在从该数据结构中删除数据节点的过程中,受到其他申请者申请或归还资源的影响,导致数据结构中记录的数据节点错乱;待将用于记录该第一申请者的身份标识的数据节点从数据结构中删除后,释放该资源对应的锁;释放资源对应的锁后,可以在该数据结构中添加或删除数据节点。
上述资源监控方法在申请者申请资源时,会相应地记录访问该申请者的身份标识,从而保证在申请者调用资源异常终止的情况下,可以根据所记录的申请者的身份标识准确地确定该资源的引用计数。具体的,在第一申请者申请资源时,创建数据节点记录该第一申请者的身份标识,将该数据节点保存至该资源对应的数据结构中;在第二申请者调用该资源异常终止时,查看该资源对应的数据结构中是否存在第二申请者的身份标识,若在数据结构中仍存在第二申请者的身份标识,则说明该第二申请者在调用资源异常终止前持有该资源,此时,相应地从数据结构中删除第二申请者对应的数据节点;如此,在申请者调用资源异常终止的情况下,可以通过判断资源对应的数据结构中是否仍存在记录有申请者身份标识的数据节点,准确地更新对应于该资源的数据结构,从而保证该数据结构中所包括的数据节点数即为准确的引用计数。
针对上文描述的资源监控方法,本申请还提供了对应的资源监控装置,以使上述资源监控签署方法在实际中得以应用和实现。
参见图4,图4是与上文图2所示的资源监控方法对应的一种资源监控装置400的结构示意图,该资源监控装置400包括:
记录模块401,用于在第一申请者申请资源时,创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;
计数恢复模块402,用于在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点。
可选的,所述装置还包括:
申请模块,当所述第一申请者申请所述资源时,获取所述资源对应的锁,在将所述数据节点保存至所述数据结构时,释放所述资源对应的锁,允许所述第一申请者持有所述资源。
可选的,所述装置还包括:
归还模块,用于当所述第一申请者归还所述资源时,获取所述资源对应的锁,从所述数据结构中删除所述第一申请者对应的数据节点,释放所述资源对应的锁。
可选的,所述数据结构采用单链表;所述数据节点包括数据字段和指针字段,所述数据字段用于记录申请者的身份标识,所述指针字段用于记录下一个数据节点地址。
可选的,所述记录模块401具体用于:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为空;
将所述数据结构中最后一个数据节点的指针字段设置为所述数据节点的指针。
可选的,所述记录模块401具体用于:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为所述数据结构中当前头节点的地址;
将所述数据结构中当前头节点的指针字段设置为所述数据节点的地址。
可选的,所述链表采用侵入式链表。
可选的,所述申请者为进程或线程。
上述资源监控装置在申请者申请资源时,会相应地记录访问该申请者的身份标识,从而保证在申请者调用资源异常终止的情况下,可以根据所记录的申请者的身份标识准确地确定该资源的引用计数。具体的,在第一申请者申请资源时,创建数据节点记录该第一申请者的身份标识,将该数据节点保存至该资源对应的数据结构中;在第二申请者调用该资源异常终止时,查看该资源对应的数据结构中是否存在第二申请者的身份标识,若在数据结构中仍存在第二申请者的身份标识,则说明该第二申请者在调用该资源异常终止前持有该资源,此时,相应地从数据结构中删除第二申请者对应的数据节点;如此,在申请者调用该资源异常终止的情况下,可以通过判断资源对应的数据结构中是否仍存在记录有申请者身份标识的数据节点,准确地更新对应于该资源的数据结构,从而保证该数据结构中所包括的数据节点数即为准确的引用计数。
本申请还提供了一种用于监控资源的设备,该设备具体可以为服务器,图5是本申请实施例提供的一种服务器结构示意图,该服务器500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)522(例如,一个或一个以上处理器)和存储器532,一个或一个以上存储应用程序542或数据544的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器532和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器522可以设置为与存储介质530通信,在服务器500上执行存储介质530中的一系列指令操作。
服务器500还可以包括一个或一个以上电源526,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口558,和/或,一个或一个以上操作系统541,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的步骤可以基于该图5所示的服务器结构。
其中,CPU 522用于执行如下步骤:
在第一申请者申请资源时,创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;
在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点。
可选的,CPU522还可以执行图2所示的资源监控方法任一具体实现方式的方法步骤。
本申请实施例还提供了另一种用于监控资源的设备,该设备可以为终端设备,如图6所示,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请实施例方法部分。该终端可以为包括手机、平板电脑、个人数字助理(PersonalDigital Assistant,PDA)等任意终端设备,以终端为手机为例:
图6示出的是与本申请实施例提供的终端相关的手机的部分结构的框图。参考图6,手机包括:射频(Radio Frequency,RF)电路610、存储器620、输入单元630、显示单元640、传感器650、音频电路660、无线保真(wireless fidelity,WiFi)模块1070、处理器680、以及电源690等部件;其中,输入单元630中包括输入面板631和其他输入设备632,显示单元640中包括显示面板641,音频电路660中包括扬声器661和传声器662。
本领域技术人员可以理解,图6中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
在本申请实施例中,该终端所包括的处理器680具有以下功能:
在第一申请者申请资源时,创建数据节点通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;
在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点。
可选的,处理器680还可以执行图2所示的资源监控方法任一具体实现方式的方法步骤。
本申请实施例还提供一种计算机可读存储介质,用于存储程序代码,该程序代码用于执行前述各个实施例所述的一种资源监控方法中的任意一种实施方式。
本申请实施例还提供一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行前述各个实施例所述的一种资源监控方法中的任意一种实施方式。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:Read-OnlyMemory,英文缩写:ROM)、随机存取存储器(英文全称:Random Access Memory,英文缩写:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (12)
1.一种资源监控方法,其特征在于,包括:
在第一申请者申请资源时,创建数据节点并通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;所述第一申请者的身份标识能够唯一标识第一申请者的身份;
在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点;
当所述第一申请者申请所述资源时,获取所述资源对应的锁,在将所述数据节点保存至所述数据结构时,释放所述资源对应的锁,允许所述第一申请者持有所述资源;
当所述第一申请者归还所述资源时,获取所述资源对应的锁,从所述数据结构中删除所述第一申请者对应的数据节点,释放所述资源对应的锁。
2.根据权利要求1所述的资源监控方法,其特征在于,所述数据结构采用单链表;所述数据节点包括数据字段和指针字段,所述数据字段用于记录申请者的身份标识,所述指针字段用于记录下一个数据节点地址。
3.根据权利要求2所述的资源监控方法,其特征在于,所述创建数据节点并通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,包括:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为空;
将所述数据结构中最后一个数据节点的指针字段设置为所述数据节点的指针。
4.根据权利要求2所述的资源监控方法,其特征在于,所述创建数据节点并通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,包括:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为所述数据结构中当前头节点的地址。
5.根据权利要求1所述的资源监控方法,其特征在于,所述数据结构采用侵入式链表。
6.一种资源监控装置,其特征在于,包括:
记录模块,用于在第一申请者申请资源时,创建数据节点并通过所述数据节点记录所述第一申请者的身份标识,并将所述数据节点保存至数据结构中,所述数据结构中记录与所述资源对应的各个数据节点;所述第一申请者的身份标识能够唯一标识第一申请者的身份;
计数恢复模块,用于在第二申请者调用所述资源异常终止时,查看所述数据结构中是否存在所述第二申请者的身份标识,当所述数据结构中存在所述第二申请者的身份标识时,则从所述数据结构中删除所述第二申请者对应的数据节点;
所述装置还包括:
申请模块,用于当所述第一申请者申请所述资源时,获取所述资源对应的锁,在将所述数据节点保存至所述数据结构时,释放所述资源对应的锁,允许所述第一申请者持有所述资源;
归还模块,用于当所述第一申请者归还所述资源时,获取所述资源对应的锁,从所述数据结构中删除所述第一申请者对应的数据节点,释放所述资源对应的锁。
7.根据权利要求6所述的资源监控装置,其特征在于,所述数据结构采用单链表;所述数据节点包括数据字段和指针字段,所述数据字段用于记录申请者的身份标识,所述指针字段用于记录下一个数据节点地址。
8.根据权利要求7所述的资源监控装置,其特征在于,所述记录模块具体用于:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为空;
将所述数据结构中最后一个数据节点的指针字段设置为所述数据节点的指针。
9.根据权利要求7所述的资源监控装置,其特征在于,所述记录模块具体用于:
创建数据节点,将所述数据节点的数据字段设置为所述第一申请者的身份标识,将所述数据节点的指针字段设置为所述数据结构中当前头节点的地址。
10.根据权利要求6所述的资源监控装置,其特征在于,所述数据结构采用侵入式链表。
11.一种存储设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储程序代码;
所述处理器,用于读取所述存储器中的程序代码,执行所述程序代码以实现权利要求1至5中任一项所述的资源监控方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行权利要求1至5中任一项所述的资源监控方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910351017.4A CN110058948B (zh) | 2019-04-28 | 2019-04-28 | 一种资源监控方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910351017.4A CN110058948B (zh) | 2019-04-28 | 2019-04-28 | 一种资源监控方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110058948A CN110058948A (zh) | 2019-07-26 |
CN110058948B true CN110058948B (zh) | 2022-01-28 |
Family
ID=67321351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910351017.4A Active CN110058948B (zh) | 2019-04-28 | 2019-04-28 | 一种资源监控方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110058948B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488526A (zh) * | 2013-09-02 | 2014-01-01 | 用友软件股份有限公司 | 在分布式系统中锁定业务资源的系统和方法 |
CN105740079A (zh) * | 2016-01-27 | 2016-07-06 | 浪潮(北京)电子信息产业有限公司 | 一种死锁处理方法与系统 |
CN106204217A (zh) * | 2016-07-08 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 资源数值转移的方法、装置和系统、资源数值转移请求的方法和装置 |
CN107301091A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 资源分配方法和装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7107610B2 (en) * | 2001-05-11 | 2006-09-12 | Intel Corporation | Resource authorization |
US9389926B2 (en) * | 2010-05-05 | 2016-07-12 | Red Hat, Inc. | Distributed resource contention detection |
US9195855B2 (en) * | 2013-02-22 | 2015-11-24 | International Business Machines Corporation | Data processing lock signal transmission |
CN103678122B (zh) * | 2013-11-29 | 2016-03-30 | 华为技术有限公司 | 一种死锁检测方法、设备及系统 |
CN104750558B (zh) * | 2013-12-31 | 2018-07-03 | 伊姆西公司 | 在分层配额系统中管理资源分配的方法和装置 |
CN107231363B (zh) * | 2017-06-12 | 2021-06-08 | 华南理工大学 | 一种分布式认证方法与认证模型 |
-
2019
- 2019-04-28 CN CN201910351017.4A patent/CN110058948B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488526A (zh) * | 2013-09-02 | 2014-01-01 | 用友软件股份有限公司 | 在分布式系统中锁定业务资源的系统和方法 |
CN105740079A (zh) * | 2016-01-27 | 2016-07-06 | 浪潮(北京)电子信息产业有限公司 | 一种死锁处理方法与系统 |
CN107301091A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 资源分配方法和装置 |
CN106204217A (zh) * | 2016-07-08 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 资源数值转移的方法、装置和系统、资源数值转移请求的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110058948A (zh) | 2019-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11146502B2 (en) | Method and apparatus for allocating resource | |
US10606806B2 (en) | Method and apparatus for storing time series data | |
CN110865867A (zh) | 应用拓扑关系发现的方法、装置和系统 | |
CN111177165B (zh) | 数据一致性检测的方法、装置及设备 | |
CN110187992B (zh) | 故障分析方法及装置 | |
CN112269661B (zh) | 基于Kafka集群的分区迁移方法和装置 | |
CN110347497B (zh) | 一种将多个存储设备划分设备组的方法及装置 | |
CN116541142A (zh) | 任务调度方法、装置、设备、存储介质及计算机程序产品 | |
CN112650692A (zh) | 堆内存分配方法、装置及存储介质 | |
CN112598529B (zh) | 数据处理方法及装置、计算机可读存储介质、电子设备 | |
CN110058948B (zh) | 一种资源监控方法、装置、设备及介质 | |
CN113590643B (zh) | 基于双轨数据库的数据同步方法、装置、设备和存储介质 | |
CN115237889A (zh) | 数据库切换方法及装置、存储介质、计算机设备 | |
CN111198853A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN114896128A (zh) | 基于区块链的应用程序性能测试方法及装置 | |
CN114328458A (zh) | 数据迁移方法及其装置、计算机存储介质 | |
CN114679465A (zh) | 资源操作方法、装置、电子设备及存储介质 | |
CN114048171A (zh) | 图像数据的存储方法、装置、介质和设备 | |
US9483241B2 (en) | Method ranking based on code invocation | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
CN113297232B (zh) | 一种基于数据库分区的数据更新方法、装置及系统 | |
CN114546705B (zh) | 操作响应方法、操作响应装置、电子设备以及存储介质 | |
CN113923215B (zh) | 虚拟机调度方法、电子设备及存储介质 | |
CN107395745A (zh) | 一种分布式存储系统数据分散存储实现方法 | |
CN116909684A (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 |