一种多进程异步调用下的TickLock锁的安全实现方法与流程
- 国知局
- 2024-09-14 15:03:25
本发明涉及大数据,尤其涉及一种多进程异步调用下的ticklock锁的安全实现方法。
背景技术:
1、ticklock本身是一种经典的锁机制,其能够保证申请使用锁的请求(request),按照排队的顺序来获得锁的访问机会。这种先到先得的机制,被用到对话信息的处理中的时候,使得发送到同一个conversation id上的消息,能够按到来的时间被顺序消费。
2、现有技术实现了单进程下的异步调用,具体实现的单进程的ticklock的工作流程如图1所示,由图可知,在单进程+异步io的实现条件下,上面的流程图中始终只有一条执行线,因此无需再单独加锁保护。基于多线程执行上述流程图的方式可以大大提高执行效率,但如果是多进程条件下,且每一个进程内部都是异步调用。目前的实现会存在锁的状态同时被多个进程修改的情况。可假设有同一个conversation的两条message,分别将其命名为m1,m2;其发生的时间戳分别为(t1,t2);且t1<t2,如果落到(p1,p2)两个进程上,即m1在p1上进程处理;m2在p2上进行处理;那么p1和p2有可能在某些条件下,同时执行上一个流程图中1.1~1.3,2.1~2.3,3.1~3.3中任意一组,这将会造成保护该conversation的ticklock的状态分别从p1以及p2看到的不一致。
3、为了解决上述问题,本发明提出一种多进程异步调用下的ticklock锁的安全实现方法。
技术实现思路
1、本发明的目的在于提出一种多进程异步调用下的ticklock锁的安全实现方法以解决背景技术中所提出的问题:
2、多进程异步调用的条件下,会存在锁的状态同时被多个进程修改的情况。
3、为了实现上述目的,本发明采用了如下技术方案:
4、一种多进程异步调用下的ticklock锁的安全实现方法,包括如下步骤:
5、s1:尝试获取当前conversation所对应的唯一的分布式锁s;
6、s2:若获取失败,则放弃当前cpu,并等待t秒,重新执行s1;若获取成功,则执行唯一的分布式锁s保护的ticklock工作流程中对应的分步骤;
7、s3:释放分布式锁s。
8、优选地,s2中所述ticklock工作流程中的分步骤包括分步骤一、分步骤二和分步骤三。
9、优选地,所述分步骤一具体如下:
10、s2.1.1:从分布式存储中获取锁的持久化实例,并在内存中命名为l;
11、s2.1.2:为当前的request申请一个ticket,并插入到l->tickets中去;
12、s2.1.3:将l重新写回到分布式存储中去。
13、优选地,所述request表示用户当前输入的一段发送到服务器的等待得到系统的响应/回复的文字。
14、优选地,所述l->tickets表示ticklock实现过程中,一个保存ticket的队列。
15、优选地,所述分步骤二具体如下:
16、s2.2.1:从分布式存储中获取锁的持久化实例,并在内存中命名为l;
17、s2.2.2:检查l->now_serving是否与ticket相等,
18、s2.2.3:若不相等,则放弃当前cpu时间片,并等待1秒钟,重新执行s2.2.1。
19、优选地,所述l->now_serving表示队列中正在被处理的request所对应的ticket。
20、优选地,所述分步骤二执行完成后,获取request持有锁并执行与锁无关的操作进行等待,若l->now_serving与ticket相等,则轮到当前request持有锁,跳转至分步骤三。
21、优选地,所述分步骤三具体如下:
22、s2.3.1:从分布式存储中获取锁的持久化实例,并在内存中命名为l;
23、s2.3.2:将当前l->now_serving所指向的ticket从l->tickets中删除;
24、s2.3.3:将l写回到持久化存储中。
25、与现有技术相比,本发明提供了一种多进程异步调用下的ticklock锁的安全实现方法,具备以下有益效果:
26、本发明在保留ticklock的异步io执行的基础上,对ticklock的异步io执行的基础步骤进行划分,并分别对划分的基础步骤进行了分布式的锁保护,实现异步io执行的过程中,ticklock的状态无法被外界所更改,在保证ticklock工作流程在多线程的条件下仍能够顺利工作的同时,保证了多进程访问ticklock的安全性。
技术特征:1.一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,s2中所述ticklock工作流程中的分步骤包括分步骤一、分步骤二和分步骤三。
3.根据权利要求2所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述分步骤一具体如下:
4.根据权利要求3所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述request表示用户当前输入的一段发送到服务器的等待得到系统的响应/回复的文字。
5.根据权利要求3所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述l->tickets表示ticklock实现过程中,一个保存ticket的队列。
6.根据权利要求2所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述分步骤二具体如下:
7.根据权利要求6所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述l->now_serving表示队列中正在被处理的request所对应的ticket。
8.根据权利要求7所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述分步骤二执行完成后,获取request持有锁并执行与锁无关的操作进行等待,若l->now_serving与ticket相等,则轮到当前request持有锁,则跳转至分步骤三。
9.根据权利要求2所述的一种多进程异步调用下的ticklock锁的安全实现方法,其特征在于,所述分步骤三具体如下:
技术总结本发明公开了一种多进程异步调用下的TickLock锁的安全实现方法,涉及即时通信、对话处理领域。本发明与之前的TickLock的工作流程相比,改进了多进程异步调用的条件下,会存在锁的状态同时被多个进程修改的问题,本发明在保留TickLock的异步IO执行的基础上,对TickLock的异步IO执行的基础步骤进行划分,并分别对划分的基础步骤进行了分布式的锁保护,实现异步IO执行的过程中,TickLock的状态更改不会在多进程之间冲突;从而提升了TickLock的使用安全性。技术研发人员:徐安华,高世煌,闫翠平受保护的技术使用者:北京分贝通科技有限公司技术研发日:技术公布日:2024/9/12本文地址:https://www.jishuxx.com/zhuanli/20240914/296795.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表