一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于工作流系统对资源进行加锁控制的方法及系统与流程

2023-01-15 08:47:28 来源:中国专利 TAG:


1.本技术涉及计算机资源控制技术领域,特别是涉及一种基于工作流系统对资源进行加锁控制的方法及系统。


背景技术:

2.随着计算机软件产品的发展,软件产品对部署环境的资源占用越来越多。尤其是用户或线程对一个或一组资源并发访问时,会使得资源占用率非常高,严重时,可能会导致内存溢出,带宽耗尽等问题。因此,如何对软件资源进行控制是个重要的技术问题。
3.目前对计算机资源进行控制的方法,通常是当资源占用超负荷时,进行等待,直到前一个资源释放后,后一个资源再进行访问。
4.然而,目前对计算机资源进行控制的方法中,由于只采用被动等待的方法,尤其是被动等待的资源也较多时,并没有相应的处理方法,使得资源控制效率较低,资源利用率较低。


技术实现要素:

5.本技术提供了一种基于工作流系统对资源进行加锁控制的方法及系统,以解决现有技术中的对资源进行控制的方法使得资源利用率较低,资源控制效率较低的问题。
6.为了解决上述技术问题,本技术实施例公开了如下技术方案:
7.一种基于工作流系统对资源进行加锁控制的方法,所述方法包括:
8.根据所获取的任务,确定工作流的数量和待加锁的资源的数量,定义任一工作流对任一待加锁资源的加锁份额为p_trn,n为自然数;
9.根据所述任一待加锁资源的加锁份额和资源标识,判断当前的加锁份额是否<100%;
10.如果所述任一待加锁资源当前的加锁份额<100%,按照当前的加锁份额对所述任一资源进行加锁,并更新加锁标识;
11.如果所述任一待加锁资源当前的加锁份额≥100%,判定加锁份额不足,对所述任一资源进行重试加锁。
12.可选地,根据所述任一待加锁的份额和资源标识,判断当前的加锁份额是否<100%之前,所述方法还包括:
13.根据工作流标识和资源标识查询数据库,判断资源锁记录是否已经存在于所述数据库中;
14.如果资源锁记录已经存在于所述数据库中,判断所述资源锁记录中的加锁标志是否为true;
15.如果资源锁记录中的加锁标志为true,判定当前工作流已经对当前资源加锁成功;
16.如果资源锁记录中的加锁标志不为true,直接执行下一步:根据所述任一待加锁
资源的加锁份额和资源标识,判断当前的加锁份额是否<100%;
17.如果资源锁记录不存在于所述数据库中,生成并保存当前资源锁的数据记录。
18.可选地,判定加锁份额不足后,对所述任一资源进行重试加锁的方法,包括:
19.定义设定的最长锁等待时间为max_wait_time,初始重试加锁间隔时间为p_time0,设定的最小重试加锁间隔时间为min_p_time;
20.计算当前时间与首次加锁时间之间的时间差;
21.根据所述时间差,利用公式p1_timen=max(min_p_tim,p_time0

p_time0*(diff_time/max_wait_time)),计算得出第一下一次重试加锁时间间隔,其中,p1_timen为第一下一次重试加锁时间间隔,diff_time为当前时间与首次加锁时间之间的时间差,max_wait_time为设定的最长锁等待时间,min_p_time为设定的最小重试加锁间隔时间;
22.所述任一工作流根据所述第一下一次重试加锁时间间隔,对所述任一资源进行重试加锁;
23.达到所述第一下一次重试加锁时间间隔后,返回重新计算当前时间与首次加锁时间之间的时间差,直到所述任一工作流对所述任一资源加锁完毕。
24.可选地,当多个工作流的首次加锁时间相同时,根据所获取的命令,指定任一工作流的优先级权重p_weight,其中,所述任一工作流的优先级权重p_weight满足:1≤p_weight≤10,p_weight为自然数,且p_weight越小优先级越高;
25.根据所述优先级权重p_weight,利用公式p2_time=max(min_p_time,p_time0

p_time0*(diff_time/max_wait_time))-(10-p_weight),计算得出每个工作流的第二下一次重试加锁时间间隔;
26.多个工作流按照第二下一次重试加锁时间间隔从小到大的顺序,依次对所述任一资源进行重试加锁。
27.可选地,当多个工作流的第一下一次重试加锁时间间隔均大于设定的最长锁等待时间时,根据所获取的命令,指定任一工作流的优先级权重p_weight,其中,所述任一工作流的优先级权重p_weight满足:1≤p_weight≤10,p_weight为自然数,且p_weight越小优先级越高;
28.根据所述优先级权重p_weight,利用公式p3_time=min_p_time-(10-p_weight),计算得出每个工作流的第三下一次重试加锁时间间隔;
29.多个工作流按照第三下一次重试加锁时间间隔从小到大或者从大到小的顺序,依次对所述任一资源进行重试加锁。
30.可选地,当多个工作流的优先级权重相同时,按照任一工作流获取到cpu计算资源的先后顺序,依次对所述任一资源进行重试加锁。
31.可选地,所述方法还包括:
32.当任一工作流结束任务后,删除所述任一工作流对所述任一待加锁资源进行资源加锁的数据记录。
33.一种基于工作流系统对资源进行加锁控制的系统,所述系统包括:
34.工作流和待加锁资源数量确定模块,用于根据所获取的任务,确定工作流的数量和待加锁的资源的数量,定义任一工作流对任一待加锁资源的加锁份额为p_trn,n为自然数;
35.第一判断模块,用于根据所述任一待加锁资源的加锁份额和资源标识,判断当前的加锁份额是否<100%;
36.资源加锁模块,用于当所述任一待加锁资源当前的加锁份额<100%时,按照当前的加锁份额对所述任一资源进行加锁,并更新加锁标识;
37.重试加锁模,用于当所述任一待加锁资源当前的加锁份额≥100%时,对所述任一资源进行重试加锁。
38.可选地,所述系统还包括:
39.第二判断模块,用于根据工作流标识和资源标识查询数据库,判断资源锁记录是否已经存在于所述数据库中,如果资源锁记录已经存在于所述数据库中,启动第三判断模块,如果资源锁记录不存在于所述数据库中,启动数据记录生成模块;
40.所述第三判断模块,用于当资源锁记录已经存在于所述数据库中时,判断所述资源锁记录中的加锁标志是否为true,如果资源锁记录中的加锁标志为true,判定当前工作流已经对当前资源加锁成功,否则,启动第一判断模块;
41.所述数据记录生成模块,用于当资源锁记录不存在于所述数据库中时,生成并保存当前资源锁的数据记录。
42.可选地,所述系统还包括:
43.删除模块,用于当任一工作流结束任务后,删除所述任一工作流对所述任一待加锁资源进行资源加锁的数据记录。
44.本技术的实施例提供的技术方案可以包括以下有益效果:
45.本技术提供一种基于工作流系统对资源进行加锁控制的方法,该方法首先根据所获取的任务,确定工作流的数量和待加锁的资源的数量,其次判断当前的加锁份额,当加锁份额没有达到100%时,可以继续对资源进行加锁,否则,对资源进行重试加锁。本实施例通过对资源加锁份额进行判断,并根据不同的份额执行不同的资源加锁方法,从而实现资源的主动加锁控制。相比于现有技术中的被动等待,本实施例能够使系统在安全负载下最大化利用系统资源,有利于提高资源控制效率,提高资源利用率。
46.当加锁份额不足时,本实施例利用相关加锁间隔参数,采用计算第一下一次重试加锁时间间隔的方法,对任一资源进行重试加锁,利用计算得出的第一下一次重试加锁时间间隔为周期,对工作流进行轮询调度,这种利用工作流重试加锁的方法,能够在不过度占用资源的前提下,充分利用系统资源进行并发操作,避免资源占用率过高,加快工作流的执行效率。本实施例还针对工作流首次加锁时间相同以及第一下一次重试加锁时间间隔均大于设定的最长锁等待时间等进一步的资源占用情况,设置相应的资源重试加锁方法,有利于进一步解决并发访问中资源过度抢占的问题,从而提高资源利用率,提高资源控制效率。
47.另外,本实施例还对资源锁记录是否存在于数据库中进行判断,充分利用已有数据库资源进行资源加锁,有利于提高资源控制效率。并及时进行数据记录的更新,为后续进行资源加锁提供依据,也有利于进一步提高资源控制效率。
48.本技术还提供一种基于工作流系统对资源进行加锁控制的系统,该系统主要包括:工作流和待加锁资源数量确定模块、判断模块、资源加锁模块和重试加锁模块四部分。通过判断模块、资源加锁模块和重试加锁模块的设置,能够对资源加锁份额进行判断,并根据不同的份额执行不同的资源加锁方式,从而实现资源的主动加锁控制。相比于现有技术
中的被动等待,本实施例能够使系统在安全负载下最大化利用系统资源,有利于提高资源控制效率,提高资源利用率。
49.本实施例还设置有删除模块,当工作流任务完成后,能够及时删除相关的数据记录,及时释放资源空间,有利于提高资源利用率。
50.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
51.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
52.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
53.图1为本技术实施例所提供的一种基于工作流系统对资源进行加锁控制的方法的流程示意图;
54.图2为本技术实施例所提供的一种基于工作流系统对资源进行加锁控制的系统的结构示意图。
具体实施方式
55.为了使本技术领域的人员更好地理解本技术中的技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
56.为了更好地理解本技术,下面结合附图来详细解释本技术的实施方式。
57.实施例一
58.参见图1,图1为本技术实施例所提供的一种基于工作流系统对资源进行加锁控制的方法的流程示意图。由图1可知,本实施例中基于工作流系统对资源进行加锁控制的方法主要包括如下过程:
59.s1:根据所获取的任务,确定工作流的数量和待加锁的资源的数量。
60.定义任一工作流对任一待加锁资源的加锁份额为p_trn,n为自然数。本实施例中采用资源锁机制,资源锁是指工作流系统中的不同工作流对一个或一组待操作的资源进行访问控制的机制,是一种资源保护的方法。例如:将多个虚拟机同时备份到一个备份存储池中,为防止大量io挤占备份网络带宽,需要对备份存储池资源加锁,利用资源锁机制控制同时执行的虚拟机备份任务的数量,以保护网络带宽。待操作的资源可以被重复加锁,但是需要控制一个或一组资源被加锁的次数,通过在不同的工作流中对一个或一组资源按照百分比的方式设置加锁份额的方式控制加锁次数,当资源加锁份额被耗尽后,后续的工作流将无法再对该资源进行加锁。
61.本实施例中用到的数据结构包括:待加锁的资源标识,用于资源的唯一标识,一般
是id;工作流标识,用于标记需要为资源加锁的工作流,一般是id;加锁份额用于表示工作流要对资源控制的百分比;加锁成功标识,用于标记工作流是否成功对资源加锁;首次加锁时间,用于记录工作流首次尝试对资源加锁的时间。
62.继续参见图1可知,确定工作流的数量和待加锁的资源的数量之后,执行步骤s6:根据任一待加锁资源的加锁份额和资源标识,判断当前的加锁份额是否<100%。
63.进一步地,步骤s6之前还包括步骤s2-s5。具体地,步骤s2:根据工作流标识和资源标识查询数据库,判断资源锁记录是否已经存在于数据库中。
64.如果资源锁记录已经存在于数据库中,执行步骤s3:判断资源锁记录中的加锁标志是否为true。
65.如果资源锁记录中的加锁标志为true,执行步骤s4:判定当前工作流已经对当前资源加锁成功;
66.如果资源锁记录中的加锁标志不为true,直接执行步骤s6:根据任一待加锁资源的加锁份额和资源标识,判断当前的加锁份额是否<100%。
67.如果资源锁记录不存在于数据库中,执行步骤s5:生成并保存当前资源锁的数据记录。
68.按照以上步骤s1中的数据结构,当工作流需要对资源执行加锁操作时,会产生一条数据记录,本实施例中将该数据记录保存至存储介质中,存储介质包括但不限于:数据库、本地文件及以及内存等。
69.数据记录的格式中包括:工作流标识、待申请的资源标识、加锁份额、加锁成功标识以及加锁时间。
70.由以上步骤s2-s5可知,假设第一个工作流t1开始执行,申请资源r1,根据业务需要,自定义t1对r1的加锁份额为p_tr1,根据资源r1的唯一标识查询已存储的资源锁记录,筛选出加锁成功标识为true的记录,将所有记录的加锁份额求和得到sum_r1,根据工作流标识和资源r1标识查询数据库中的数据记录,如果资源锁记录存在于数据库的数据记录中,且加锁标识为成功标识true,即:工作流t1已经对资源r1加锁成功。如果资源锁记录存在于数据库的数据记录中,且加锁标识为失败标识false,即:上次加锁失败,此时再判断如果p_tr1 sum_r1<100%,则更新加锁成功标识为true,即本次加锁成功;如果p_tr1 sum_r1≥100%,即资源r1加锁份额不足,无法对其加锁,等待下一次加锁。如果资源锁记录不存在于数据库的数据记录中,再判断,如果p_tr1 sum_r1<100%,则产生一条数据记录,其数据结构步骤s1中的数据格式,其中加锁成功标识为true,即本次加锁成功;如果p_tr1 sum_r1≥100%,即资源r1加锁份额不足,无法对其加锁,则跳过该步骤,等待下一次加锁。
71.通过以上步骤s2-s5,能够充分利用已有数据库资源进行资源加锁,有利于提高资源控制效率。并及时进行数据记录的更新,为后续进行资源加锁提供依据,也有利于进一步提高资源控制效率。
72.继续参见图1可知,判断当前的加锁份额是否<100%时,如果任一待加锁资源当前的加锁份额<100%,执行步骤s7:按照当前的加锁份额对任一资源进行加锁,并更新加锁标识。
73.通过更新加锁标识,使得后续资源加锁判断过程中可以充分利用数据记录信息,有利于提高资源加锁效率,提高资源控制效率。
74.如果任一待加锁资源当前的加锁份额≥100%,判定加锁份额不足,执行步骤s8:对任一资源进行重试加锁。
75.进一步地,步骤s8包括如下过程:
76.s801:定义设定的最长锁等待时间为max_wait_time,初始重试加锁间隔时间为p_time0,设定的最小重试加锁间隔时间为min_p_time。
77.设定的最长锁等待时间可以选择1小时,初始重试加锁间隔时间可以设置为30000毫秒,设定的最小重试加锁间隔时间可以选择100毫秒。
78.s802:计算当前时间与首次加锁时间之间的时间差。
79.diff_time=cur_time-tn,其中,diff_time为当前时间与首次加锁时间之间的时间差,cur_time为当前时间,tn为首次加锁时间。
80.s803:根据时间差,利用公式p1_timen=max(min_p_tim,p_time0

p_time0*(diff_time/max_wait_time)),计算得出第一下一次重试加锁时间间隔。
81.其中,p1_timen为第一下一次重试加锁时间间隔,diff_time为当前时间与首次加锁时间之间的时间差,max_wait_time为设定的最长锁等待时间,min_p_time为设定的最小重试加锁间隔时间。
82.s804:任一工作流根据第一下一次重试加锁时间间隔,对任一资源进行重试加锁。
83.s805:达到第一下一次重试加锁时间间隔后,返回重新计算当前时间与首次加锁时间之间的时间差,直到任一工作流对任一资源加锁完毕。
84.也就是达到步骤s803计算得出的重试加锁时间间隔后,以此时间间隔为周期,返回步骤s802,工作流以该重试加锁时间间隔周期轮询调度执行。
85.由以上步骤s201-s805可知,按照本实施例中的方法,随着时间的推移,p1_timen的值会越来越小,即:工作流的调度周期会随着时间的推移越来越短,调度频率会加快。越早执行的工作流申请锁的频次就越高,在相同时间内申请到锁并执行的几率也越高,从而能够避免资源占用,有利于提高资料控制效率。
86.进一步地,当多个工作流的首次加锁时间相同时,执行步骤s811:根据所获取的命令,指定任一工作流的优先级权重p_weight。其中,任一工作流的优先级权重p_weight满足:1≤p_weight≤10,p_weight为自然数,且p_weight越小优先级越高。
87.s812:根据优先级权重p_weight,利用公式p2_time=max(min_p_time,p_time0

p_time0*(diff_time/max_wait_time))-(10-p_weight),计算得出每个工作流的第二下一次重试加锁时间间隔。
88.s813:多个工作流按照第二下一次重试加锁时间间隔从小到大的顺序,依次对任一资源进行重试加锁。
89.本实施例中,p2_time越小,工作流优先级权重越高,其调用频率越高,通过这种方法能够进一步将多个工作流的首次加锁时间相同情况下的资源占用率区别开,从而避免资源过度占用,提高资源控制效率。
90.进一步地,当多个工作流的第一下一次重试加锁时间间隔均大于设定的最长锁等待时间时,执行步骤s831:根据所获取的命令,指定任一工作流的优先级权重p_weight,其中,任一工作流的优先级权重p_weight满足:1≤p_weight≤10,p_weight为自然数,且p_weight越小优先级越高。
91.当多个工作流的第一下一次重试加锁时间间隔均大于设定的最长锁等待时间时,由步骤s803中的公式可知,max(min_p_time,p_time-p_time*(diff_time/max_wait_time))=min_p_time,即所有待执行的工作流的调度周期都变成了min_p_time。
92.s832:根据优先级权重p_weight,利用公式p3_time=min_p_time-(10-p_weight),计算得出每个工作流的第三下一次重试加锁时间间隔;
93.s833:多个工作流按照第三下一次重试加锁时间间隔从小到大或者从大到小的顺序,依次对任一资源进行重试加锁。
94.由步骤s833可知,将第三下一次重试加锁时间间隔进行大小排序,多个工作流按照排序依次对任一资源进行重试加锁即可,并不规定顺序是从大到小还是从小到达,只要能够将重试加锁时间错开即可避免资源过度占用。通过以上步骤s831-s833,能够使不同工作流的调度周期随着权重的不同产生差异,从而对工作流获取锁的几率差异化,实现资源的有效控制。
95.进一步地,当步骤s812或步骤s832中当多个工作流的优先级权重相同时,按照任一工作流获取到cpu计算资源的先后顺序,依次对任一资源进行重试加锁,也就是先获取到cpu计算资源的工作流先对资源进行重试加锁。
96.通过以上步骤,本实施例在重试加锁过程中,能够涵盖实际应用的中绝大部分场景,有利于提高资源控制效率,提高资源利用率。
97.本实施例中的方法还包括步骤s9:当任一工作流结束任务后,删除任一工作流对任一待加锁资源进行资源加锁的数据记录。
98.通过及时删除不需要的数据记录,将系统资源用于更有需要的地方,有利于提高系统资源的利用率。
99.实施例二
100.在图1所示实施例的基础上参见图2,图2为本技术实施例所提供的一种基于工作流系统对资源进行加锁控制的系统的结构示意图。
101.由图2可知,本实施例中基于工作流系统对资源进行加锁控制的系统,主要包括:工作流和待加锁资源数量确定模块、判断模块、资源加锁模块和重试加锁模块四部分。
102.其中,工作流和待加锁资源数量确定模块,用于根据所获取的任务,确定工作流的数量和待加锁的资源的数量,定义任一工作流对任一待加锁资源的加锁份额为p_trn,n为自然数;第一判断模块,用于根据任一待加锁资源的加锁份额和资源标识,判断当前的加锁份额是否<100%;资源加锁模块,用于当任一待加锁资源当前的加锁份额<100%时,按照当前的加锁份额对任一资源进行加锁,并更新加锁标识;重试加锁模,用于当任一待加锁资源当前的加锁份额≥100%时,对任一资源进行重试加锁。
103.进一步地,该系统中还包括有:第二判断模块、第三判断模块、数据记录生成模块。其中,第二判断模块,用于根据工作流标识和资源标识查询数据库,判断资源锁记录是否已经存在于数据库中,如果资源锁记录已经存在于数据库中,启动第三判断模块,如果资源锁记录不存在于数据库中,启动数据记录生成模块;第三判断模块,用于当资源锁记录已经存在于数据库中时,判断资源锁记录中的加锁标志是否为true,如果资源锁记录中的加锁标志为true,判定当前工作流已经对当前资源加锁成功,否则,启动第一判断模块;数据记录生成模块,用于当资源锁记录不存在于数据库中时,生成并保存当前资源锁的数据记录。
104.该系统中还包括删除模块,用于当任一工作流结束任务后,删除任一工作流对任一待加锁资源进行资源加锁的数据记录。
105.该实施例中基于工作流系统对资源进行加锁控制的系统的工作原理和工作方法,在图1所示的实施例中已经详细阐述,在此不再赘述。
106.以上所述仅是本技术的具体实施方式,使本领域技术人员能够理解或实现本技术。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献